{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-07-30T02:10:39.191829300Z",
     "start_time": "2024-07-30T02:10:33.587695900Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "sys.version_info(major=3, minor=12, micro=3, releaselevel='final', serial=0)\n",
      "matplotlib 3.9.0\n",
      "numpy 1.26.4\n",
      "pandas 2.2.2\n",
      "sklearn 1.5.0\n",
      "torch 2.3.1+cpu\n",
      "cpu\n"
     ]
    }
   ],
   "source": [
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import sklearn\n",
    "import pandas as pd\n",
    "import os\n",
    "import sys\n",
    "import time\n",
    "from tqdm.auto import tqdm\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.nn.functional as F\n",
    "\n",
    "print(sys.version_info)\n",
    "for module in mpl, np, pd, sklearn, torch:\n",
    "    print(module.__name__, module.__version__)\n",
    "    \n",
    "device = torch.device(\"cuda:0\") if torch.cuda.is_available() else torch.device(\"cpu\")\n",
    "print(device)\n",
    "\n",
    "seed = 42\n",
    "torch.manual_seed(seed)\n",
    "torch.cuda.manual_seed_all(seed)\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 准备数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-07-30T02:11:20.215625200Z",
     "start_time": "2024-07-30T02:11:10.020167400Z"
    }
   },
   "outputs": [],
   "source": [
    "from tensorflow import keras\n",
    "#用karas有的数据集imdb，电影分类,分电影是积极的，还是消极的\n",
    "imdb = keras.datasets.imdb\n",
    "#载入数据使用下面两个参数\n",
    "vocab_size = 10000  #词典大小，仅保留训练数据中前10000个最经常出现的单词，低频单词被舍弃\n",
    "index_from = 3  #0,1,2,3空出来做别的事\n",
    "#前一万个词出现词频最高的会保留下来进行处理，后面的作为特殊字符处理，\n",
    "# 小于3的id都是特殊字符，下面代码有写\n",
    "# 需要注意的一点是取出来的词表还是从1开始的，需要做处理\n",
    "(train_data, train_labels), (test_data, test_labels) = imdb.load_data(\n",
    "    num_words = vocab_size, index_from = index_from)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-07-30T02:11:22.256488800Z",
     "start_time": "2024-07-30T02:11:22.243874400Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train 25000 (25000,)\n",
      "test 25000 (25000,)\n"
     ]
    }
   ],
   "source": [
    "\n",
    "print(\"train\", len(train_data), train_labels.shape)  #25000个样本，每个样本是一段话，每个单词用一个数字表示\n",
    "print(\"test\", len(test_data), test_labels.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-07-30T02:11:24.976318800Z",
     "start_time": "2024-07-30T02:11:24.861450300Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "88584\n",
      "<class 'dict'>\n"
     ]
    }
   ],
   "source": [
    "#载入词表，看下词表长度，词表就像英语字典\n",
    "word_index = imdb.get_word_index()\n",
    "print(len(word_index))\n",
    "print(type(word_index))\n",
    "#词表虽然有8万多，但是我们只载入了最高频的1万词！！！！"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 构造 word2idx 和 idx2word"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-07-30T02:11:27.172671400Z",
     "start_time": "2024-07-30T02:11:27.105535400Z"
    }
   },
   "outputs": [],
   "source": [
    "word2idx = {word: idx + 3 for word, idx in word_index.items()}\n",
    "word2idx.update({\n",
    "    \"[PAD]\": 0,     # 填充 token\n",
    "    \"[BOS]\": 1,     # begin of sentence\n",
    "    \"[UNK]\": 2,     # 未知 token\n",
    "    \"[EOS]\": 3,     # end of sentence\n",
    "})\n",
    "\n",
    "idx2word = {idx: word for word, idx in word2idx.items()}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-07-30T02:11:31.945723100Z",
     "start_time": "2024-07-30T02:11:29.851513100Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 1 Axes>",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGdCAYAAAA44ojeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA75ElEQVR4nO3deXgUVb7/8U9viYlmMYFsY9iVRQICaogLwiUKcUVwBhQdUAZEAyOgiPGqoN57w6jjMoo4jgrOKOLoZXFwxIcdl4CAICCIgCioCTAyJCyS9HJ+f3ipny3pQKBT3Q3v1/PU4+mq09XfOrSpb59TdcphjDECAACIIs5IBwAAAPBLJCgAACDqkKAAAICoQ4ICAACiDgkKAACIOiQoAAAg6pCgAACAqEOCAgAAoo470gEcj0AgoO+//15JSUlyOByRDgcAABwDY4z27dunnJwcOZ1195HEZILy/fffKzc3N9JhAACA47Bjxw6dddZZddaJyQQlKSlJ0k8HmJycHOFoAADAsaiqqlJubq51Hq9LTCYoh4d1kpOTSVBiiN/v17JlyyRJXbt2lcvlinBEAIBIOJbLM2IyQUFs8vv9mj9/viTpggsuIEEBAIREggLbOJ1OdezY0SoDABAKCQps43a71adPn0iHAQCIAfVKUEpLSzVjxgx98cUXSkhI0EUXXaQ//OEPat26tVXn0KFDuvvuuzV9+nRVV1erV69eev7555WZmWnV2b59u+644w4tWrRIZ5xxhgYNGqTS0lK53eRLAHAyMMbI5/PJ7/dHOhTYyOVyye12h2UKkHplBEuWLFFxcbEuuOAC+Xw+3X///briiiu0YcMGnX766ZKk0aNH691339Vbb72llJQUjRgxQn379tVHH30k6afrEK666iplZWXp448/Vnl5uX7729/K4/Hof/7nf074gAAAkVVTU6Py8nIdPHgw0qEgAhITE5Wdna24uLgT2o/DGGOO9827d+9WRkaGlixZom7duqmyslKNGzfWtGnTdMMNN0iSvvjiC7Vt21ZlZWXq2rWr3nvvPV199dX6/vvvrV6VF154QePGjdPu3buP6YCqqqqUkpKiyspK7uKJITU1NXryySclSWPGjDnhLy+A6BMIBLR582a5XC41btxYcXFxTKh5ijDGqKamRrt375bf79fZZ599xPWG9Tl/n9CYSmVlpSQpLS1NkrRq1Sp5vV4VFhZaddq0aaMmTZpYCUpZWZny8vKChnx69eqlO+64Q59//rk6dep0xOdUV1eruro66AARm37+7wjg5FNTU6NAIKDc3FwlJiZGOhzYLCEhQR6PR998841qamp02mmnHfe+jjtBCQQCGjVqlC6++GK1b99eklRRUaG4uDilpqYG1c3MzFRFRYVV5+fJyeHth7fVprS0VA8//PDxhooo4fF4NGLECKsM4OTFnXqnrnD92x/3XoqLi7V+/XpNnz49LIHUpaSkRJWVldayY8eOBv9MhJ/D4VB6errS09Pp8gUA1Om4EpQRI0Zozpw5WrRoUdBc+llZWaqpqdHevXuD6u/cuVNZWVlWnZ07dx6x/fC22sTHx1uzxjJ7LADgZOdwODRr1qxIhyFJmjBhgs477zzbP7deCYoxRiNGjNDMmTO1cOFCNW/ePGh7ly5d5PF4tGDBAmvdpk2btH37dhUUFEiSCgoKtG7dOu3atcuqM2/ePCUnJ6tdu3YnciyIcn6/X5988ok++eQTbj0EgCgUTYlRva5BKS4u1rRp0zR79mwlJSVZ14ykpKQoISFBKSkpGjJkiMaMGaO0tDQlJydr5MiRKigoUNeuXSVJV1xxhdq1a6dbbrlFjz32mCoqKvTAAw+ouLhY8fHx4T9CRA2/36/33ntPknTeeecx1T0AIKR69aBMnjxZlZWV6t69u7Kzs63lzTfftOo89dRTuvrqq9WvXz9169ZNWVlZmjFjhrXd5XJpzpw5crlcKigo0M0336zf/va3euSRR8J3VIhKTqdT7dq1U7t27biADkDU6d69u0aOHKlRo0bpzDPPVGZmpv7yl7/owIEDuvXWW5WUlKRWrVpZP7Skn354DRkyRM2bN1dCQoJat26tZ555xtp+6NAhnXvuuRo2bJi1buvWrUpKStIrr7xyzLHt2LFDv/nNb5Samqq0tDRdd911+vrrr63tgwcPVp8+ffTEE08oOztb6enpKi4ultfrteqUl5frqquuUkJCgpo3b65p06apWbNmevrppyVJzZo1kyRdf/31cjgc1uvD/va3v6lZs2ZKSUnRgAEDtG/fvmOO/7iYGFRZWWkkmcrKykiHAgD4mR9//NFs2LDB/Pjjj0dsq66uNtXV1SYQCFjrfD6fqa6uNl6vN6x1j8dll11mkpKSzKOPPmq+/PJL8+ijjxqXy2WKiorMiy++aL788ktzxx13mPT0dHPgwAFjjDE1NTXmoYceMitWrDBfffWVee2110xiYqJ58803rf2uXr3axMXFmVmzZhmfz2e6du1qrr/++jpjkWRmzpxpfUbbtm3NbbfdZtauXWs2bNhgbrrpJtO6dWtTXV1tjDFm0KBBJjk52QwfPtxs3LjR/OMf/zCJiYnmxRdftPZZWFhozjvvPLNs2TKzatUqc9lll5mEhATz1FNPGWOM2bVrl5FkpkyZYsrLy82uXbuMMcaMHz/enHHGGaZv375m3bp1ZunSpSYrK8vcf//9tcZe13egPudvEhQAQNjUdXKaMGGCmTBhgtm/f7+1bsmSJWbChAlm9uzZQXX/+7//20yYMMH8+9//ttaVlZWZCRMmmP/93/8NqvvYY4+ZCRMmmJ07d55Q7Jdddpm55JJLrNc+n8+cfvrp5pZbbrHWlZeXG0mmrKws5H6Ki4tNv379joixUaNGZsSIESY7O9v861//qjOWnycof/vb30zr1q2DErDq6mqTkJBg3n//fWPMTwlK06ZNjc/ns+r8+te/Nv379zfGGLNx40YjyaxYscLavnnzZiPJSlB++bmHjR8/3iQmJpqqqipr3dixY01+fn6tsYcrQeHhNwAA/J8OHTpYZZfLpfT0dOXl5VnrDs/b9fMbPSZNmqRXXnlF27dv148//qiampoj7nq5++67NWvWLD333HN67733lJ6efswxffbZZ9qyZYuSkpKC1h86dEhbt261Xp977rlB1/ZlZ2dr3bp1kn66YcXtdqtz587W9latWunMM888phiaNWsW9PnZ2dlBbdAQSFBgG6/Xq2effVaSNHLkSCZrA04xJSUlkoInarz44ovVtWvXI65Lu+eee46oe8EFF6hz585H1L3rrruOqHu8frkPh8MRtO7wHE6BQECSNH36dN1zzz364x//qIKCAiUlJenxxx/X8uXLg/aza9cuffnll3K5XNq8ebN69+59zDHt379fXbp00euvv37EtsaNG9cZ++E4T1RD7jsUEhTYxhhjXVRljv8RUABiVG3P33K5XLXe0Xeide3y0Ucf6aKLLtKdd95prft5r8Zht912m/Ly8jRkyBANHTpUhYWFatu27TF9RufOnfXmm28qIyPjuOcBa926tXw+n1avXq0uXbpIkrZs2aJ///vfQfU8Hk/UTAPBrRSwjdvt1u23367bb79dbje5MYDYd/bZZ2vlypV6//339eWXX+rBBx/UihUrgupMmjRJZWVlevXVVzVw4ED16dNHAwcOVE1NzTF9xsCBA9WoUSNdd911+uCDD7Rt2zYtXrxYv//97/Xtt98e0z7atGmjwsJCDRs2TJ988olWr16tYcOGKSEhIWhm72bNmmnBggWqqKg4InmxGwkKbON0OpWVlaWsrCxuMwZwUrj99tvVt29f9e/fX/n5+frhhx+CelO++OILjR07Vs8//7xyc3MlSc8//7z+9a9/6cEHHzymz0hMTNTSpUvVpEkT9e3bV23bttWQIUN06NChevWo/PWvf1VmZqa6deum66+/XkOHDlVSUlLQA/3++Mc/at68ecrNza314b12cpgY7Guvz+OaAQD2OXTokLZt26bmzZuf0JNs0fC+/fZb5ebmav78+erZs2fY9lvXd6A+52/62WEbv99vXVGel5fHTLIAYKOFCxdq//79ysvLU3l5ue699141a9ZM3bp1i3RotSJBgW38fr9mz54tSWrXrh0JCgDYyOv16v7779dXX32lpKQkXXTRRXr99dej9o5KEhTYxul06uyzz7bKAAD79OrVS7169Yp0GMeMBAW2cbvduummmyIdBgAgBvAzFgAARB0SFABA2MXgDaIIk3D92zPEA9t4vV698MILkqThw4dH7YVZAI7f4f+vDx48qISEhAhHg0g4ePCgpBN/9AAJCmxjjNGePXusMoCTj8vlUmpqqvUgucTExKCZSnHyMsbo4MGD2rVrl1JTU0/4Tk0SFNjG7Xbr1ltvtcoATk5ZWVmS1OBPu0V0Sk1Ntb4DJ4KzBGzjdDrVpEmTSIcBoIE5HA5lZ2crIyNDXq830uHARh6PJ2xzXJGgAAAaRKinDwPHggQFtgkEAtq4caMkqW3btkzWBgAIiTMEbOPz+fT222/r7bffls/ni3Q4AIAoRg8KbONwONS0aVOrDABAKCQosI3H49HgwYMjHQYAIAYwxAMAAKIOCQoAAIg6DPHANl6vVy+//LIkaciQIUx1DwAIiQQFtjHGaOfOnVYZAIBQSFBgG7fbrZtvvtkqAwAQCmcJ2MbpdKply5aRDgMAEAO4SBYAAEQdelBgm0AgoC1btkiSWrVqxVT3AICQOEPANj6fT2+88YbeeOMNproHANSJHhTYxuFwKCcnxyoDABAKCQps4/F4NHTo0EiHAQCIAQzxAACAqFPvBGXp0qW65pprlJOTI4fDoVmzZgVtdzgctS6PP/64VadZs2ZHbJ84ceIJHwwAADg51HuI58CBA+rYsaNuu+029e3b94jt5eXlQa/fe+89DRkyRP369Qta/8gjjwR19yclJdU3FMQYr9erv/3tb5KkW265hanuAQAh1TtBKSoqUlFRUcjtWVlZQa9nz56tHj16qEWLFkHrk5KSjqiLk5sxRjt27LDKAACE0qDXoOzcuVPvvvuuhgwZcsS2iRMnKj09XZ06ddLjjz9e522n1dXVqqqqCloQe9xut/r376/+/fsz1T0AoE4NepZ49dVXlZSUdMRQ0O9//3t17txZaWlp+vjjj1VSUqLy8nI9+eSTte6ntLRUDz/8cEOGChs4nU61adMm0mEAAGKAw5xAX7vD4dDMmTPVp0+fWre3adNGl19+uZ599tk69/PKK6/o9ttv1/79+xUfH3/E9urqalVXV1uvq6qqlJubq8rKSiUnJx9v+AAAwEZVVVVKSUk5pvN3g/WgfPDBB9q0aZPefPPNo9bNz8+Xz+fT119/rdatWx+xPT4+vtbEBbElEAho+/btkqQmTZow1T0AIKQGO0O8/PLL6tKlizp27HjUumvWrJHT6VRGRkZDhYMo4PP59Oqrr+rVV19lqnsAQJ3q3YOyf/9+64FvkrRt2zatWbNGaWlpatKkiaSfunDeeust/fGPfzzi/WVlZVq+fLl69OihpKQklZWVafTo0br55pt15plnnsChINo5HA41btzYKgMAEEq9r0FZvHixevToccT6QYMGaerUqZKkF198UaNGjVJ5eblSUlKC6n366ae688479cUXX6i6ulrNmzfXLbfcojFjxhzzME59xrAAAEB0qM/5+4Quko0UEhQAAGJPfc7fXKUIAACiDrNlwTZer1fTp0+XJA0YMICp7gEAIZGgwDbGGH311VdWGQCAUEhQYBu3263rr7/eKgMAEApnCdjG6XSqQ4cOkQ4DABADuEgWAABEHXpQYJtAIKDy8nJJUnZ2NlPdAwBC4gwB2/h8Pr300kt66aWXmOoeAFAnelBgG4fDYc0szFT3AIC6kKDANh6PR6NGjYp0GACAGMAQDwAAiDokKAAAIOowxAPb+Hw+vf3225KkG264gcnaAAAhcYaAbQKBgDZt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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 选择 max_length\n",
    "length_collect = {}\n",
    "for text in train_data:\n",
    "    length = len(text)\n",
    "    length_collect[length] = length_collect.get(length, 0) + 1\n",
    "    \n",
    "MAX_LENGTH = 500\n",
    "plt.bar(length_collect.keys(), length_collect.values())\n",
    "plt.axvline(MAX_LENGTH, label=\"max length\", c=\"gray\", ls=\":\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Tokenizer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-07-30T02:11:39.608746600Z",
     "start_time": "2024-07-30T02:11:39.558366300Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "raw text\n",
      "['hello', 'world']\n",
      "['tokenize', 'text', 'datas', 'with', 'batch']\n",
      "['this', 'is', 'a', 'test']\n",
      "indices\n",
      "tensor([   0,    0,    0,    1, 4825,  182,    3])\n",
      "tensor([    1,     2,  3004,     2,    19, 19233,     3])\n",
      "tensor([   0,    1,   14,    9,    6, 2181,    3])\n",
      "decode text\n",
      "[PAD] [PAD] [PAD] [BOS] hello world [EOS]\n",
      "[BOS] [UNK] text [UNK] with batch [EOS]\n",
      "[PAD] [BOS] this is a test [EOS]\n"
     ]
    }
   ],
   "source": [
    "class Tokenizer:\n",
    "    def __init__(self, word2idx, idx2word, max_length=500, pad_idx=0, bos_idx=1, eos_idx=3, unk_idx=2):\n",
    "        self.word2idx = word2idx\n",
    "        self.idx2word = idx2word\n",
    "        self.max_length = max_length\n",
    "        self.pad_idx = pad_idx\n",
    "        self.bos_idx = bos_idx\n",
    "        self.eos_idx = eos_idx\n",
    "        self.unk_idx = unk_idx\n",
    "    \n",
    "    def encode(self, text_list, padding_first=False):\n",
    "        \"\"\"如果padding_first == True，则padding加载前面，否则加载后面\"\"\"\n",
    "        max_length = min(self.max_length, 2 + max([len(text) for text in text_list]))\n",
    "        indices_list = []\n",
    "        for text in text_list:\n",
    "            indices = [self.bos_idx] + [self.word2idx.get(word, self.unk_idx) for word in text[:max_length-2]] + [self.eos_idx]\n",
    "            if padding_first:\n",
    "                indices = [self.pad_idx] * (max_length - len(indices)) + indices\n",
    "            else:\n",
    "                indices = indices + [self.pad_idx] * (max_length - len(indices))\n",
    "            indices_list.append(indices)\n",
    "        return torch.tensor(indices_list)\n",
    "    \n",
    "    \n",
    "    def decode(self, indices_list, remove_bos=True, remove_eos=True, remove_pad=True, split=False):\n",
    "        text_list = []\n",
    "        for indices in indices_list:\n",
    "            text = []\n",
    "            for index in indices:\n",
    "                word = self.idx2word.get(index, \"[UNK]\")\n",
    "                if remove_bos and word == \"[BOS]\":\n",
    "                    continue\n",
    "                if remove_eos and word == \"[EOS]\":\n",
    "                    break\n",
    "                if remove_pad and word == \"[PAD]\":\n",
    "                    break\n",
    "                text.append(word)\n",
    "            text_list.append(\" \".join(text) if not split else text)\n",
    "        return text_list\n",
    "    \n",
    "\n",
    "tokenizer = Tokenizer(word2idx=word2idx, idx2word=idx2word)\n",
    "raw_text = [\"hello world\".split(), \"tokenize text datas with batch\".split(), \"this is a test\".split()]\n",
    "indices = tokenizer.encode(raw_text, padding_first=True)\n",
    "decode_text = tokenizer.decode(indices.tolist(), remove_bos=False, remove_eos=False, remove_pad=False)\n",
    "print(\"raw text\")\n",
    "for raw in raw_text:\n",
    "    print(raw)\n",
    "print(\"indices\")\n",
    "for index in indices:\n",
    "    print(index)\n",
    "print(\"decode text\")\n",
    "for decode in decode_text:\n",
    "    print(decode)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-07-30T02:11:50.627828Z",
     "start_time": "2024-07-30T02:11:50.610417500Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "[\"[BOS] this film was just brilliant casting location scenery story direction everyone's really suited the part they played and you could just imagine being there robert [UNK] is an amazing actor and now the same being director [UNK] father came from the same scottish island as myself so i loved the fact there was a real connection with this film the witty remarks throughout the film were great it was just brilliant so much that i bought the film as soon as it was released for [UNK] and would recommend it to everyone to watch and the fly fishing was amazing really cried at the end it was so sad and you know what they say if you cry at a film it must have been good and this definitely was also [UNK] to the two little boy's that played the [UNK] of norman and paul they were just brilliant children are often left out of the [UNK] list i think because the stars that play them all grown up are such a big profile for the whole film but these children are amazing and should be praised for what they have done don't you think the whole story was so lovely because it was true and was someone's life after all that was shared with us all\",\n \"[BOS] big hair big boobs bad music and a giant safety pin these are the words to best describe this terrible movie i love cheesy horror movies and i've seen hundreds but this had got to be on of the worst ever made the plot is paper thin and ridiculous the acting is an abomination the script is completely laughable the best is the end showdown with the cop and how he worked out who the killer is it's just so damn terribly written the clothes are sickening and funny in equal [UNK] the hair is big lots of boobs [UNK] men wear those cut [UNK] shirts that show off their [UNK] sickening that men actually wore them and the music is just [UNK] trash that plays over and over again in almost every scene there is trashy music boobs and [UNK] taking away bodies and the gym still doesn't close for [UNK] all joking aside this is a truly bad film whose only charm is to look back on the disaster that was the 80's and have a good old laugh at how bad everything was back then\"]"
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 看看训练集的数据\n",
    "\n",
    "tokenizer.decode(train_data[:2], remove_bos=False, remove_eos=False, remove_pad=False)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据集与 DataLoader"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-07-30T02:12:00.209773Z",
     "start_time": "2024-07-30T02:11:57.224449800Z"
    }
   },
   "outputs": [],
   "source": [
    "from torch.utils.data import Dataset, DataLoader\n",
    "\n",
    "class IMDBDataset(Dataset):\n",
    "    def __init__(self, data, labels, remain_length=True):\n",
    "        if remain_length:\n",
    "            self.data = tokenizer.decode(data, remove_bos=False, remove_eos=False, remove_pad=False)\n",
    "        else:\n",
    "            # 缩减一下数据\n",
    "            self.data = tokenizer.decode(data)\n",
    "        self.labels = labels\n",
    "    \n",
    "    def __getitem__(self, index):\n",
    "        text = self.data[index]\n",
    "        label = self.labels[index]\n",
    "        return text, label\n",
    "    \n",
    "    def __len__(self):\n",
    "        return len(self.data)\n",
    "    \n",
    "    \n",
    "def collate_fct(batch):\n",
    "    text_list = [item[0].split() for item in batch]\n",
    "    label_list = [item[1] for item in batch]\n",
    "    # 这里使用 padding first\n",
    "    text_list = tokenizer.encode(text_list, padding_first=True).to(dtype=torch.int)\n",
    "    return text_list, torch.tensor(label_list).reshape(-1, 1).to(dtype=torch.float)\n",
    "\n",
    "\n",
    "# 用RNN，缩短序列长度\n",
    "train_ds = IMDBDataset(train_data, train_labels, remain_length=False)\n",
    "test_ds = IMDBDataset(test_data, test_labels, remain_length=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-07-30T02:13:07.523221700Z",
     "start_time": "2024-07-30T02:13:07.509719400Z"
    }
   },
   "outputs": [],
   "source": [
    "batch_size = 128\n",
    "train_dl = DataLoader(train_ds, batch_size=batch_size, shuffle=True, collate_fn=collate_fct)\n",
    "test_dl = DataLoader(test_ds, batch_size=batch_size, shuffle=False, collate_fn=collate_fct)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([128, 500]) torch.Size([128, 1])\n"
     ]
    }
   ],
   "source": [
    "for text, label in train_dl: #检查样本是否存在问题\n",
    "    print(text.shape, label.shape)\n",
    "    break"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-07-30T02:49:48.013349600Z",
     "start_time": "2024-07-30T02:49:47.950151400Z"
    }
   }
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 定义模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-07-30T02:56:06.130811500Z",
     "start_time": "2024-07-30T02:56:06.115795Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "================================== 一层单向 LSTM ===================================\n",
      "            embeding.weight             paramerters num: 160000\n",
      "           lstm.weight_ih_l0            paramerters num: 4096\n",
      "           lstm.weight_hh_l0            paramerters num: 16384\n",
      "            lstm.bias_ih_l0             paramerters num: 256\n",
      "            lstm.bias_hh_l0             paramerters num: 256\n",
      "              layer.weight              paramerters num: 4096\n",
      "               layer.bias               paramerters num: 64\n",
      "               fc.weight                paramerters num: 64\n",
      "                fc.bias                 paramerters num: 1\n"
     ]
    }
   ],
   "source": [
    "class LSTM(nn.Module):\n",
    "    def __init__(self, embedding_dim=16, hidden_dim=64, vocab_size=vocab_size, num_layers=1, bidirectional=False):\n",
    "        super(LSTM, self).__init__()\n",
    "        self.embeding = nn.Embedding(vocab_size, embedding_dim)\n",
    "        self.lstm = nn.LSTM(embedding_dim, hidden_dim, num_layers=num_layers, batch_first=True, bidirectional=bidirectional)\n",
    "        self.layer = nn.Linear(hidden_dim * (2 if bidirectional else 1), hidden_dim)\n",
    "        self.fc = nn.Linear(hidden_dim, 1)\n",
    "        \n",
    "    def forward(self, x):\n",
    "        # [bs, seq length]\n",
    "        x = self.embeding(x)\n",
    "        # [bs, seq length, embedding_dim] -> shape [bs, seq length，hidden_dim]\n",
    "        seq_output, (hidden, cell) = self.lstm(x)\n",
    "        # print(seq_output.shape)\n",
    "        # print(hidden.shape)\n",
    "        # print(cell.shape)\n",
    "        # print(seq_output[:, -1, :].squeeze()==hidden.squeeze())\n",
    "        # print(seq_output[:, -1, :].squeeze()==cell.squeeze())\n",
    "        x = seq_output[:, -1, :]\n",
    "        # 取最后一个时间步的输出 (这也是为什么要设置padding_first=True的原因)\n",
    "        x = self.layer(x)\n",
    "        x = self.fc(x)\n",
    "        return x\n",
    "    \n",
    "sample_inputs = torch.randint(0, vocab_size, (2, 128))\n",
    "    \n",
    "print(\"{:=^80}\".format(\" 一层单向 LSTM \"))       \n",
    "for key, value in LSTM().named_parameters():\n",
    "    print(f\"{key:^40}paramerters num: {np.prod(value.shape)}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([128, 500, 64])\n",
      "torch.Size([1, 128, 64])\n",
      "torch.Size([1, 128, 64])\n",
      "tensor([[True, True, True,  ..., True, True, True],\n",
      "        [True, True, True,  ..., True, True, True],\n",
      "        [True, True, True,  ..., True, True, True],\n",
      "        ...,\n",
      "        [True, True, True,  ..., True, True, True],\n",
      "        [True, True, True,  ..., True, True, True],\n",
      "        [True, True, True,  ..., True, True, True]])\n",
      "tensor([[False, False, False,  ..., False, False, False],\n",
      "        [False, False, False,  ..., False, False, False],\n",
      "        [False, False, False,  ..., False, False, False],\n",
      "        ...,\n",
      "        [False, False, False,  ..., False, False, False],\n",
      "        [False, False, False,  ..., False, False, False],\n",
      "        [False, False, False,  ..., False, False, False]])\n",
      "torch.Size([128, 1])\n"
     ]
    }
   ],
   "source": [
    "model = LSTM()\n",
    "#随机一个（128,500）的输入\n",
    "sample_inputs = torch.randint(0, vocab_size, (128, 500))\n",
    "sample_outputs = model(sample_inputs)\n",
    "print(sample_outputs.shape)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-07-30T02:53:29.581586Z",
     "start_time": "2024-07-30T02:53:29.481290100Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "outputs": [
    {
     "data": {
      "text/plain": "4096"
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "64*64"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-07-30T02:15:50.096207800Z",
     "start_time": "2024-07-30T02:15:50.080216700Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "outputs": [
    {
     "data": {
      "text/plain": "4096"
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "4 * 16 * 64 #lstm.weight_ih_l0"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-05-02T08:36:09.545313600Z",
     "start_time": "2024-05-02T08:36:09.506335700Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "outputs": [
    {
     "data": {
      "text/plain": "8192"
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "128*64"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-07-30T02:56:57.186572800Z",
     "start_time": "2024-07-30T02:56:57.168877900Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "================================== 一层双向 LSTM ===================================\n",
      "            embeding.weight             paramerters num: 160000\n",
      "           lstm.weight_ih_l0            paramerters num: 4096\n",
      "           lstm.weight_hh_l0            paramerters num: 16384\n",
      "            lstm.bias_ih_l0             paramerters num: 256\n",
      "            lstm.bias_hh_l0             paramerters num: 256\n",
      "       lstm.weight_ih_l0_reverse        paramerters num: 4096\n",
      "       lstm.weight_hh_l0_reverse        paramerters num: 16384\n",
      "        lstm.bias_ih_l0_reverse         paramerters num: 256\n",
      "        lstm.bias_hh_l0_reverse         paramerters num: 256\n",
      "              layer.weight              paramerters num: 8192\n",
      "               layer.bias               paramerters num: 64\n",
      "               fc.weight                paramerters num: 64\n",
      "                fc.bias                 paramerters num: 1\n"
     ]
    }
   ],
   "source": [
    "print(\"{:=^80}\".format(\" 一层双向 LSTM \"))\n",
    "for key, value in LSTM(bidirectional=True).named_parameters():\n",
    "    print(f\"{key:^40}paramerters num: {np.prod(value.shape)}\")\n"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-07-30T02:56:12.085699200Z",
     "start_time": "2024-07-30T02:56:12.070558800Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "================================== 两层单向 LSTM ===================================\n",
      "            embeding.weight             paramerters num: 160000\n",
      "           lstm.weight_ih_l0            paramerters num: 4096\n",
      "           lstm.weight_hh_l0            paramerters num: 16384\n",
      "            lstm.bias_ih_l0             paramerters num: 256\n",
      "            lstm.bias_hh_l0             paramerters num: 256\n",
      "           lstm.weight_ih_l1            paramerters num: 16384\n",
      "           lstm.weight_hh_l1            paramerters num: 16384\n",
      "            lstm.bias_ih_l1             paramerters num: 256\n",
      "            lstm.bias_hh_l1             paramerters num: 256\n",
      "              layer.weight              paramerters num: 4096\n",
      "               layer.bias               paramerters num: 64\n",
      "               fc.weight                paramerters num: 64\n",
      "                fc.bias                 paramerters num: 1\n"
     ]
    }
   ],
   "source": [
    "print(\"{:=^80}\".format(\" 两层单向 LSTM \"))\n",
    "for key, value in LSTM(num_layers=2).named_parameters():\n",
    "    print(f\"{key:^40}paramerters num: {np.prod(value.shape)}\")"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-07-30T02:57:03.952832300Z",
     "start_time": "2024-07-30T02:57:03.940771400Z"
    }
   }
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-07-30T02:57:22.790960200Z",
     "start_time": "2024-07-30T02:57:22.446263Z"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.metrics import accuracy_score\n",
    "\n",
    "@torch.no_grad()\n",
    "def evaluating(model, dataloader, loss_fct):\n",
    "    loss_list = []\n",
    "    pred_list = []\n",
    "    label_list = []\n",
    "    for datas, labels in dataloader:\n",
    "        datas = datas.to(device)\n",
    "        labels = labels.to(device)\n",
    "        # 前向计算\n",
    "        logits = model(datas)\n",
    "        loss = loss_fct(logits, labels)         # 验证集损失\n",
    "        loss_list.append(loss.item())\n",
    "        # 二分类\n",
    "        preds = logits > 0\n",
    "        pred_list.extend(preds.cpu().numpy().tolist())\n",
    "        label_list.extend(labels.cpu().numpy().tolist())\n",
    "        \n",
    "    acc = accuracy_score(label_list, pred_list)\n",
    "    return np.mean(loss_list), acc\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### TensorBoard 可视化\n",
    "\n",
    "\n",
    "训练过程中可以使用如下命令启动tensorboard服务。\n",
    "\n",
    "```shell\n",
    "tensorboard \\\n",
    "    --logdir=runs \\     # log 存放路径\n",
    "    --host 0.0.0.0 \\    # ip\n",
    "    --port 8848         # 端口\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "from torch.utils.tensorboard import SummaryWriter\n",
    "\n",
    "\n",
    "class TensorBoardCallback:\n",
    "    def __init__(self, log_dir, flush_secs=10):\n",
    "        \"\"\"\n",
    "        Args:\n",
    "            log_dir (str): dir to write log.\n",
    "            flush_secs (int, optional): write to dsk each flush_secs seconds. Defaults to 10.\n",
    "        \"\"\"\n",
    "        self.writer = SummaryWriter(log_dir=log_dir, flush_secs=flush_secs)\n",
    "\n",
    "    def draw_model(self, model, input_shape):\n",
    "        self.writer.add_graph(model, input_to_model=torch.randn(input_shape))\n",
    "        \n",
    "    def add_loss_scalars(self, step, loss, val_loss):\n",
    "        self.writer.add_scalars(\n",
    "            main_tag=\"training/loss\", \n",
    "            tag_scalar_dict={\"loss\": loss, \"val_loss\": val_loss},\n",
    "            global_step=step,\n",
    "            )\n",
    "        \n",
    "    def add_acc_scalars(self, step, acc, val_acc):\n",
    "        self.writer.add_scalars(\n",
    "            main_tag=\"training/accuracy\",\n",
    "            tag_scalar_dict={\"accuracy\": acc, \"val_accuracy\": val_acc},\n",
    "            global_step=step,\n",
    "        )\n",
    "        \n",
    "    def add_lr_scalars(self, step, learning_rate):\n",
    "        self.writer.add_scalars(\n",
    "            main_tag=\"training/learning_rate\",\n",
    "            tag_scalar_dict={\"learning_rate\": learning_rate},\n",
    "            global_step=step,\n",
    "            \n",
    "        )\n",
    "    \n",
    "    def __call__(self, step, **kwargs):\n",
    "        # add loss\n",
    "        loss = kwargs.pop(\"loss\", None)\n",
    "        val_loss = kwargs.pop(\"val_loss\", None)\n",
    "        if loss is not None and val_loss is not None:\n",
    "            self.add_loss_scalars(step, loss, val_loss)\n",
    "        # add acc\n",
    "        acc = kwargs.pop(\"acc\", None)\n",
    "        val_acc = kwargs.pop(\"val_acc\", None)\n",
    "        if acc is not None and val_acc is not None:\n",
    "            self.add_acc_scalars(step, acc, val_acc)\n",
    "        # add lr\n",
    "        learning_rate = kwargs.pop(\"lr\", None)\n",
    "        if learning_rate is not None:\n",
    "            self.add_lr_scalars(step, learning_rate)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Save Best\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "class SaveCheckpointsCallback:\n",
    "    def __init__(self, save_dir, save_step=5000, save_best_only=True):\n",
    "        \"\"\"\n",
    "        Save checkpoints each save_epoch epoch. \n",
    "        We save checkpoint by epoch in this implementation.\n",
    "        Usually, training scripts with pytorch evaluating model and save checkpoint by step.\n",
    "\n",
    "        Args:\n",
    "            save_dir (str): dir to save checkpoint\n",
    "            save_epoch (int, optional): the frequency to save checkpoint. Defaults to 1.\n",
    "            save_best_only (bool, optional): If True, only save the best model or save each model at every epoch.\n",
    "        \"\"\"\n",
    "        self.save_dir = save_dir\n",
    "        self.save_step = save_step\n",
    "        self.save_best_only = save_best_only\n",
    "        self.best_metrics = -1\n",
    "        \n",
    "        # mkdir\n",
    "        if not os.path.exists(self.save_dir):\n",
    "            os.mkdir(self.save_dir)\n",
    "        \n",
    "    def __call__(self, step, state_dict, metric=None):\n",
    "        if step % self.save_step > 0:\n",
    "            return\n",
    "        \n",
    "        if self.save_best_only:\n",
    "            assert metric is not None\n",
    "            if metric >= self.best_metrics:\n",
    "                # save checkpoints\n",
    "                torch.save(state_dict, os.path.join(self.save_dir, \"best.ckpt\"))\n",
    "                # update best metrics\n",
    "                self.best_metrics = metric\n",
    "        else:\n",
    "            torch.save(state_dict, os.path.join(self.save_dir, f\"{step}.ckpt\"))\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Early Stop"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "class EarlyStopCallback:\n",
    "    def __init__(self, patience=5, min_delta=0.01):\n",
    "        \"\"\"\n",
    "\n",
    "        Args:\n",
    "            patience (int, optional): Number of epochs with no improvement after which training will be stopped.. Defaults to 5.\n",
    "            min_delta (float, optional): Minimum change in the monitored quantity to qualify as an improvement, i.e. an absolute \n",
    "                change of less than min_delta, will count as no improvement. Defaults to 0.01.\n",
    "        \"\"\"\n",
    "        self.patience = patience\n",
    "        self.min_delta = min_delta\n",
    "        self.best_metric = -1\n",
    "        self.counter = 0\n",
    "        \n",
    "    def __call__(self, metric):\n",
    "        if metric >= self.best_metric + self.min_delta:\n",
    "            # update best metric\n",
    "            self.best_metric = metric\n",
    "            # reset counter \n",
    "            self.counter = 0\n",
    "        else: \n",
    "            self.counter += 1\n",
    "            \n",
    "    @property\n",
    "    def early_stop(self):\n",
    "        return self.counter >= self.patience\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "358756a8847d4896ad3b5b0c6766c07a",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/3920 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 训练\n",
    "def training(\n",
    "    model, \n",
    "    train_loader, \n",
    "    val_loader, \n",
    "    epoch, \n",
    "    loss_fct, \n",
    "    optimizer, \n",
    "    tensorboard_callback=None,\n",
    "    save_ckpt_callback=None,\n",
    "    early_stop_callback=None,\n",
    "    eval_step=500,\n",
    "    ):\n",
    "    record_dict = {\n",
    "        \"train\": [],\n",
    "        \"val\": []\n",
    "    }\n",
    "    \n",
    "    global_step = 0\n",
    "    model.train()\n",
    "    with tqdm(total=epoch * len(train_loader)) as pbar:\n",
    "        for epoch_id in range(epoch):\n",
    "            # training\n",
    "            for datas, labels in train_loader:\n",
    "                datas = datas.to(device)\n",
    "                labels = labels.to(device)\n",
    "                # 梯度清空\n",
    "                optimizer.zero_grad()\n",
    "                # 模型前向计算\n",
    "                logits = model(datas)\n",
    "                # 计算损失\n",
    "                loss = loss_fct(logits, labels)\n",
    "                # 梯度回传\n",
    "                loss.backward()\n",
    "                # 调整优化器，包括学习率的变动等\n",
    "                optimizer.step()\n",
    "                preds = logits > 0\n",
    "            \n",
    "                acc = accuracy_score(labels.cpu().numpy(), preds.cpu().numpy())    \n",
    "                loss = loss.cpu().item()\n",
    "                # record\n",
    "                \n",
    "                record_dict[\"train\"].append({\n",
    "                    \"loss\": loss, \"acc\": acc, \"step\": global_step\n",
    "                })\n",
    "                \n",
    "                # evaluating\n",
    "                if global_step % eval_step == 0:\n",
    "                    model.eval()\n",
    "                    val_loss, val_acc = evaluating(model, val_loader, loss_fct)\n",
    "                    record_dict[\"val\"].append({\n",
    "                        \"loss\": val_loss, \"acc\": val_acc, \"step\": global_step\n",
    "                    })\n",
    "                    model.train()\n",
    "                    \n",
    "                    # 1. 使用 tensorboard 可视化\n",
    "                    if tensorboard_callback is not None:\n",
    "                        tensorboard_callback(\n",
    "                            global_step, \n",
    "                            loss=loss, val_loss=val_loss,\n",
    "                            acc=acc, val_acc=val_acc,\n",
    "                            lr=optimizer.param_groups[0][\"lr\"],\n",
    "                            )\n",
    "                \n",
    "                    # 2. 保存模型权重 save model checkpoint\n",
    "                    if save_ckpt_callback is not None:\n",
    "                        save_ckpt_callback(global_step, model.state_dict(), metric=val_acc)\n",
    "\n",
    "                    # 3. 早停 Early Stop\n",
    "                    if early_stop_callback is not None:\n",
    "                        early_stop_callback(val_acc)\n",
    "                        if early_stop_callback.early_stop:\n",
    "                            print(f\"Early stop at epoch {epoch_id} / global_step {global_step}\")\n",
    "                            return record_dict\n",
    "                    \n",
    "                # udate step\n",
    "                global_step += 1\n",
    "                pbar.update(1)\n",
    "                pbar.set_postfix({\"epoch\": epoch_id})\n",
    "        \n",
    "    return record_dict\n",
    "        \n",
    "\n",
    "epoch = 20\n",
    "\n",
    "model = LSTM()\n",
    "\n",
    "# 1. 定义损失函数 采用交叉熵损失 (但是二分类)\n",
    "loss_fct = F.binary_cross_entropy_with_logits\n",
    "# 2. 定义优化器 采用 adam\n",
    "# Optimizers specified in the torch.optim package\n",
    "optimizer = torch.optim.Adam(model.parameters(), lr=0.001)\n",
    "\n",
    "# 1. tensorboard 可视化\n",
    "if not os.path.exists(\"runs\"):\n",
    "    os.mkdir(\"runs\")\n",
    "tensorboard_callback = TensorBoardCallback(\"runs/imdb-lstm\")\n",
    "# tensorboard_callback.draw_model(model, [1, MAX_LENGTH])\n",
    "# 2. save best\n",
    "if not os.path.exists(\"checkpoints\"):\n",
    "    os.makedirs(\"checkpoints\")\n",
    "save_ckpt_callback = SaveCheckpointsCallback(\"checkpoints/imdb-lstm\", save_step=len(train_dl), save_best_only=True)\n",
    "# 3. early stop\n",
    "early_stop_callback = EarlyStopCallback(patience=10)\n",
    "\n",
    "model = model.to(device)\n",
    "record = training(\n",
    "    model, \n",
    "    train_dl, \n",
    "    test_dl, \n",
    "    epoch, \n",
    "    loss_fct, \n",
    "    optimizer, \n",
    "    tensorboard_callback=tensorboard_callback,\n",
    "    save_ckpt_callback=save_ckpt_callback,\n",
    "    early_stop_callback=early_stop_callback,\n",
    "    eval_step=len(train_dl)\n",
    "    )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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P/3E4cOHufXWW7nnnnt466238Pv9XH755dx222188MEHeL1eli9fjt1ux2azceONNzJw4ED+8Y9/YLfbWb16NW63u9LzsCKYvhd0+bT6m2yof6OCIJipizyXojh6AG09FJl25vWrJoGTW+SNqDMxihajUCosazhqVdtTWubMtu9YSVQXt3Ahl1dsfeHudtpokeIOpeF5KkiTq8hBrX3zJBRFsRQpELuOqSokOKzS5KJHhtxOO+1blGdpOSoQQ+FCCMojQ/Wl11BcYsjlcjF48GDmzp3LpZdeCuhfpnPnzmXSpEkxt/3kk0/weDzccMMNVZ5slUhownL3CJJKDtJGyaGZUkhCoAAOrYVDa8kC/mj8rp/xGENsLia4mrN/ZTr7V6Rztz2dWepwFm7LoUOLZA7ll7I7t5hhnZqHQrXzN5eHLbcfKeTzVfu59fROln8EgiDUDc2aNeP888/n/fffD4mhTz/9lPT0dM4++2xsNhv9+/cPjX/66af5/PPP+fLLLyv8jKuI999/n9LSUv7zn/+EaiZfffVVLrroIv785z/jdDo5fvw4F154IV26dAGgV69eoe337NnD7373O3r21PtpdOvWrVrzEQThxJJf6iPRWfkmlNUlr9hLk0RnRA1NiCqooaAgSHRFXjBrmkZesY9mMYrtw4XGsSIvTZOs52gV8ckt8prEzN6jxRSGRWyMrzeZIkP6cp+FCUOpL0B+qY8ftlinnFnNPS+KCHGV/X6DttLGzY4WeUl22zliuOgPHjsaSWXn2ip9DaKLsqritjhOrGvX8HlVFBmyImjQ0CANFAAmT57MzTffzJAhQxg2bBgvv/wyRUVF3HLLLQDcdNNNtGnThueee8603bRp00KpKLXJBmdfrj5+d+h1MiW0VnL550Ut6ew8xo5tG1m7YT1tlBzaKDlkKsewq14627LpTHmO6QRtPi9sH8D1wzsw4rm5qBp8cNupofUdDRGjC/++kBJfgD1Hi/l7I4kWCY0cZ5IeoaklVFUlv6CAtNRUbM746givv/56brvtNl5//XXcbjfvvfce11xzDTabjcLCQp544glmzpzJwYMH8fv9lJSUsGfPnmrPeePGjfTv399kHjNq1ChUVWXz5s2cccYZTJw4kXHjxjFmzBhGjx7N1VdfTVZWFqB/9t5666288847jB49mquuuiokmgRBqF8cKfAw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ICYmBuPHj8ehQ4cUZS5evIjp06cjMTERSUlJuO+++1BVVaUos3v3bowdOxZ2ux1ZWVl46aWXGvrUGo0FCxZg5MiRSEhIQGpqKm6++WYUFhYqytTV1WH27Nno0KED4uPjcdttt6GkpERRpqioCDfccANiY2ORmpqKxx57DG63W1Fm3bp1GDZsGGw2G3r27In333+/oU+v0Xj77bcxePBgeVG1nJwcfPPNN/Ln1IfhsXDhQnAch0ceeUTeRn3Z/KB7kw+6L0UHujdFB7o3RZ9mf18SWzGffvqpaLVaxWXLlol79+4VZ82aJSYlJYklJSVN3bQmY+XKleKf/vQn8YsvvhABiF9++aXi84ULF4rt2rUTv/rqK3HXrl3iL3/5S7Fbt25ibW2tXOa6664ThwwZIm7evFlcv3692LNnT3HatGny5+Xl5WJaWpo4ffp08eeffxb/+c9/ijExMeLf/va3xjrNBmXSpEni8uXLxZ9//lksKCgQJ0+eLHbp0kWsqqqSyzzwwANiVlaWmJ+fL27btk28/PLLxTFjxsifu91uceDAgeL48ePFnTt3iitXrhRTUlLEuXPnymWOHj0qxsbGirm5ueK+ffvEN954QzSZTOKqVasa9Xwbiv/85z/iihUrxIMHD4qFhYXiH//4R9FisYg///yzKIrUh+GwdetWMTs7Wxw8eLD48MMPy9upL5sXdG9SQvel6ED3puhA96bo0hLuS61aDI0aNUqcPXu2/N7j8YidOnUSFyxY0IStaj6obzqCIIjp6eniyy+/LG8rKysTbTab+M9//lMURVHct2+fCED86aef5DLffPONyHGcePr0aVEURfGtt94S27dvLzocDrnME088Ifbp06eBz6hpOHfunAhA/P7770VR9PaZxWIR//3vf8tl9u/fLwIQN23aJIqi9+bP87xYXFwsl3n77bfFxMREud8ef/xxccCAAYpjTZ06VZw0aVJDn1KT0b59e/Hdd9+lPgyDyspKsVevXmJeXp541VVXyTcd6svmB92bjKH7UvSge1P0oHtTeLSU+1KrTZNzOp3Yvn07xo8fL2/jeR7jx4/Hpk2bmrBlzZdjx46huLhY0Wft2rXD6NGj5T7btGkTkpKSMGLECLnM+PHjwfM8tmzZIpe58sorYbVaP1AjqgAACY9JREFU5TKTJk1CYWEhLl261Ehn03iUl5cD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",
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"601.806633pt\" height=\"321.95625pt\" viewBox=\"0 0 601.806633 321.95625\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n",
       " <metadata>\n",
       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
       "   <cc:Work>\n",
       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
       "    <dc:date>2023-04-24T22:22:36.139966</dc:date>\n",
       "    <dc:format>image/svg+xml</dc:format>\n",
       "    <dc:creator>\n",
       "     <cc:Agent>\n",
       "      <dc:title>Matplotlib v3.6.3, https://matplotlib.org/</dc:title>\n",
       "     </cc:Agent>\n",
       "    </dc:creator>\n",
       "   </cc:Work>\n",
       "  </rdf:RDF>\n",
       " </metadata>\n",
       " <defs>\n",
       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
       " </defs>\n",
       " <g id=\"figure_1\">\n",
       "  <g id=\"patch_1\">\n",
       "   <path d=\"M -0 321.95625 \n",
       "L 601.806633 321.95625 \n",
       "L 601.806633 0 \n",
       "L -0 0 \n",
       "z\n",
       "\" style=\"fill: #ffffff\"/>\n",
       "  </g>\n",
       "  <g id=\"axes_1\">\n",
       "   <g id=\"patch_2\">\n",
       "    <path d=\"M 30.103125 284.4 \n",
       "L 283.739489 284.4 \n",
       "L 283.739489 7.2 \n",
       "L 30.103125 7.2 \n",
       "z\n",
       "\" style=\"fill: #ffffff\"/>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_1\">\n",
       "    <g id=\"xtick_1\">\n",
       "     <g id=\"line2d_1\">\n",
       "      <path d=\"M 41.632051 284.4 \n",
       "L 41.632051 7.2 \n",
       "\" clip-path=\"url(#p1e1c92a354)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_2\">\n",
       "      <defs>\n",
       "       <path id=\"mc0e4cf00b2\" d=\"M 0 0 \n",
       "L 0 3.5 \n",
       "\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </defs>\n",
       "      <g>\n",
       "       <use xlink:href=\"#mc0e4cf00b2\" x=\"41.632051\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_1\">\n",
       "      <!-- 0 -->\n",
       "      <g transform=\"translate(38.450801 298.998438) scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-30\" d=\"M 2034 4250 \n",
       "Q 1547 4250 1301 3770 \n",
       "Q 1056 3291 1056 2328 \n",
       "Q 1056 1369 1301 889 \n",
       "Q 1547 409 2034 409 \n",
       "Q 2525 409 2770 889 \n",
       "Q 3016 1369 3016 2328 \n",
       "Q 3016 3291 2770 3770 \n",
       "Q 2525 4250 2034 4250 \n",
       "z\n",
       "M 2034 4750 \n",
       "Q 2819 4750 3233 4129 \n",
       "Q 3647 3509 3647 2328 \n",
       "Q 3647 1150 3233 529 \n",
       "Q 2819 -91 2034 -91 \n",
       "Q 1250 -91 836 529 \n",
       "Q 422 1150 422 2328 \n",
       "Q 422 3509 836 4129 \n",
       "Q 1250 4750 2034 4750 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_2\">\n",
       "     <g id=\"line2d_3\">\n",
       "      <path d=\"M 100.603537 284.4 \n",
       "L 100.603537 7.2 \n",
       "\" clip-path=\"url(#p1e1c92a354)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_4\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#mc0e4cf00b2\" x=\"100.603537\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_2\">\n",
       "      <!-- 1000 -->\n",
       "      <g transform=\"translate(87.878537 298.998438) scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-31\" d=\"M 794 531 \n",
       "L 1825 531 \n",
       "L 1825 4091 \n",
       "L 703 3866 \n",
       "L 703 4441 \n",
       "L 1819 4666 \n",
       "L 2450 4666 \n",
       "L 2450 531 \n",
       "L 3481 531 \n",
       "L 3481 0 \n",
       "L 794 0 \n",
       "L 794 531 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-31\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_3\">\n",
       "     <g id=\"line2d_5\">\n",
       "      <path d=\"M 159.575024 284.4 \n",
       "L 159.575024 7.2 \n",
       "\" clip-path=\"url(#p1e1c92a354)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_6\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#mc0e4cf00b2\" x=\"159.575024\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_3\">\n",
       "      <!-- 2000 -->\n",
       "      <g transform=\"translate(146.850024 298.998438) scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-32\" d=\"M 1228 531 \n",
       "L 3431 531 \n",
       "L 3431 0 \n",
       "L 469 0 \n",
       "L 469 531 \n",
       "Q 828 903 1448 1529 \n",
       "Q 2069 2156 2228 2338 \n",
       "Q 2531 2678 2651 2914 \n",
       "Q 2772 3150 2772 3378 \n",
       "Q 2772 3750 2511 3984 \n",
       "Q 2250 4219 1831 4219 \n",
       "Q 1534 4219 1204 4116 \n",
       "Q 875 4013 500 3803 \n",
       "L 500 4441 \n",
       "Q 881 4594 1212 4672 \n",
       "Q 1544 4750 1819 4750 \n",
       "Q 2544 4750 2975 4387 \n",
       "Q 3406 4025 3406 3419 \n",
       "Q 3406 3131 3298 2873 \n",
       "Q 3191 2616 2906 2266 \n",
       "Q 2828 2175 2409 1742 \n",
       "Q 1991 1309 1228 531 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-32\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_4\">\n",
       "     <g id=\"line2d_7\">\n",
       "      <path d=\"M 218.54651 284.4 \n",
       "L 218.54651 7.2 \n",
       "\" clip-path=\"url(#p1e1c92a354)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_8\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#mc0e4cf00b2\" x=\"218.54651\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_4\">\n",
       "      <!-- 3000 -->\n",
       "      <g transform=\"translate(205.82151 298.998438) scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-33\" d=\"M 2597 2516 \n",
       "Q 3050 2419 3304 2112 \n",
       "Q 3559 1806 3559 1356 \n",
       "Q 3559 666 3084 287 \n",
       "Q 2609 -91 1734 -91 \n",
       "Q 1441 -91 1130 -33 \n",
       "Q 819 25 488 141 \n",
       "L 488 750 \n",
       "Q 750 597 1062 519 \n",
       "Q 1375 441 1716 441 \n",
       "Q 2309 441 2620 675 \n",
       "Q 2931 909 2931 1356 \n",
       "Q 2931 1769 2642 2001 \n",
       "Q 2353 2234 1838 2234 \n",
       "L 1294 2234 \n",
       "L 1294 2753 \n",
       "L 1863 2753 \n",
       "Q 2328 2753 2575 2939 \n",
       "Q 2822 3125 2822 3475 \n",
       "Q 2822 3834 2567 4026 \n",
       "Q 2313 4219 1838 4219 \n",
       "Q 1578 4219 1281 4162 \n",
       "Q 984 4106 628 3988 \n",
       "L 628 4550 \n",
       "Q 988 4650 1302 4700 \n",
       "Q 1616 4750 1894 4750 \n",
       "Q 2613 4750 3031 4423 \n",
       "Q 3450 4097 3450 3541 \n",
       "Q 3450 3153 3228 2886 \n",
       "Q 3006 2619 2597 2516 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-33\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_5\">\n",
       "     <g id=\"line2d_9\">\n",
       "      <path d=\"M 277.517997 284.4 \n",
       "L 277.517997 7.2 \n",
       "\" clip-path=\"url(#p1e1c92a354)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_10\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#mc0e4cf00b2\" x=\"277.517997\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_5\">\n",
       "      <!-- 4000 -->\n",
       "      <g transform=\"translate(264.792997 298.998438) scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-34\" d=\"M 2419 4116 \n",
       "L 825 1625 \n",
       "L 2419 1625 \n",
       "L 2419 4116 \n",
       "z\n",
       "M 2253 4666 \n",
       "L 3047 4666 \n",
       "L 3047 1625 \n",
       "L 3713 1625 \n",
       "L 3713 1100 \n",
       "L 3047 1100 \n",
       "L 3047 0 \n",
       "L 2419 0 \n",
       "L 2419 1100 \n",
       "L 313 1100 \n",
       "L 313 1709 \n",
       "L 2253 4666 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-34\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"text_6\">\n",
       "     <!-- step -->\n",
       "     <g transform=\"translate(146.105682 312.676562) scale(0.1 -0.1)\">\n",
       "      <defs>\n",
       "       <path id=\"DejaVuSans-73\" d=\"M 2834 3397 \n",
       "L 2834 2853 \n",
       "Q 2591 2978 2328 3040 \n",
       "Q 2066 3103 1784 3103 \n",
       "Q 1356 3103 1142 2972 \n",
       "Q 928 2841 928 2578 \n",
       "Q 928 2378 1081 2264 \n",
       "Q 1234 2150 1697 2047 \n",
       "L 1894 2003 \n",
       "Q 2506 1872 2764 1633 \n",
       "Q 3022 1394 3022 966 \n",
       "Q 3022 478 2636 193 \n",
       "Q 2250 -91 1575 -91 \n",
       "Q 1294 -91 989 -36 \n",
       "Q 684 19 347 128 \n",
       "L 347 722 \n",
       "Q 666 556 975 473 \n",
       "Q 1284 391 1588 391 \n",
       "Q 1994 391 2212 530 \n",
       "Q 2431 669 2431 922 \n",
       "Q 2431 1156 2273 1281 \n",
       "Q 2116 1406 1581 1522 \n",
       "L 1381 1569 \n",
       "Q 847 1681 609 1914 \n",
       "Q 372 2147 372 2553 \n",
       "Q 372 3047 722 3315 \n",
       "Q 1072 3584 1716 3584 \n",
       "Q 2034 3584 2315 3537 \n",
       "Q 2597 3491 2834 3397 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       <path id=\"DejaVuSans-74\" d=\"M 1172 4494 \n",
       "L 1172 3500 \n",
       "L 2356 3500 \n",
       "L 2356 3053 \n",
       "L 1172 3053 \n",
       "L 1172 1153 \n",
       "Q 1172 725 1289 603 \n",
       "Q 1406 481 1766 481 \n",
       "L 2356 481 \n",
       "L 2356 0 \n",
       "L 1766 0 \n",
       "Q 1100 0 847 248 \n",
       "Q 594 497 594 1153 \n",
       "L 594 3053 \n",
       "L 172 3053 \n",
       "L 172 3500 \n",
       "L 594 3500 \n",
       "L 594 4494 \n",
       "L 1172 4494 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       <path id=\"DejaVuSans-65\" d=\"M 3597 1894 \n",
       "L 3597 1613 \n",
       "L 953 1613 \n",
       "Q 991 1019 1311 708 \n",
       "Q 1631 397 2203 397 \n",
       "Q 2534 397 2845 478 \n",
       "Q 3156 559 3463 722 \n",
       "L 3463 178 \n",
       "Q 3153 47 2828 -22 \n",
       "Q 2503 -91 2169 -91 \n",
       "Q 1331 -91 842 396 \n",
       "Q 353 884 353 1716 \n",
       "Q 353 2575 817 3079 \n",
       "Q 1281 3584 2069 3584 \n",
       "Q 2775 3584 3186 3129 \n",
       "Q 3597 2675 3597 1894 \n",
       "z\n",
       "M 3022 2063 \n",
       "Q 3016 2534 2758 2815 \n",
       "Q 2500 3097 2075 3097 \n",
       "Q 1594 3097 1305 2825 \n",
       "Q 1016 2553 972 2059 \n",
       "L 3022 2063 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       <path id=\"DejaVuSans-70\" d=\"M 1159 525 \n",
       "L 1159 -1331 \n",
       "L 581 -1331 \n",
       "L 581 3500 \n",
       "L 1159 3500 \n",
       "L 1159 2969 \n",
       "Q 1341 3281 1617 3432 \n",
       "Q 1894 3584 2278 3584 \n",
       "Q 2916 3584 3314 3078 \n",
       "Q 3713 2572 3713 1747 \n",
       "Q 3713 922 3314 415 \n",
       "Q 2916 -91 2278 -91 \n",
       "Q 1894 -91 1617 61 \n",
       "Q 1341 213 1159 525 \n",
       "z\n",
       "M 3116 1747 \n",
       "Q 3116 2381 2855 2742 \n",
       "Q 2594 3103 2138 3103 \n",
       "Q 1681 3103 1420 2742 \n",
       "Q 1159 2381 1159 1747 \n",
       "Q 1159 1113 1420 752 \n",
       "Q 1681 391 2138 391 \n",
       "Q 2594 391 2855 752 \n",
       "Q 3116 1113 3116 1747 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "      </defs>\n",
       "      <use xlink:href=\"#DejaVuSans-73\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-74\" x=\"52.099609\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-65\" x=\"91.308594\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-70\" x=\"152.832031\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_2\">\n",
       "    <g id=\"ytick_1\">\n",
       "     <g id=\"line2d_11\">\n",
       "      <path d=\"M 30.103125 251.876968 \n",
       "L 283.739489 251.876968 \n",
       "\" clip-path=\"url(#p1e1c92a354)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_12\">\n",
       "      <defs>\n",
       "       <path id=\"md5e7bb56e4\" d=\"M 0 0 \n",
       "L -3.5 0 \n",
       "\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </defs>\n",
       "      <g>\n",
       "       <use xlink:href=\"#md5e7bb56e4\" x=\"30.103125\" y=\"251.876968\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_7\">\n",
       "      <!-- 0.1 -->\n",
       "      <g transform=\"translate(7.2 255.676187) scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-2e\" d=\"M 684 794 \n",
       "L 1344 794 \n",
       "L 1344 0 \n",
       "L 684 0 \n",
       "L 684 794 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-31\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_2\">\n",
       "     <g id=\"line2d_13\">\n",
       "      <path d=\"M 30.103125 215.456574 \n",
       "L 283.739489 215.456574 \n",
       "\" clip-path=\"url(#p1e1c92a354)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_14\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#md5e7bb56e4\" x=\"30.103125\" y=\"215.456574\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_8\">\n",
       "      <!-- 0.2 -->\n",
       "      <g transform=\"translate(7.2 219.255793) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-32\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_3\">\n",
       "     <g id=\"line2d_15\">\n",
       "      <path d=\"M 30.103125 179.03618 \n",
       "L 283.739489 179.03618 \n",
       "\" clip-path=\"url(#p1e1c92a354)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_16\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#md5e7bb56e4\" x=\"30.103125\" y=\"179.03618\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_9\">\n",
       "      <!-- 0.3 -->\n",
       "      <g transform=\"translate(7.2 182.835399) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-33\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_4\">\n",
       "     <g id=\"line2d_17\">\n",
       "      <path d=\"M 30.103125 142.615786 \n",
       "L 283.739489 142.615786 \n",
       "\" clip-path=\"url(#p1e1c92a354)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_18\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#md5e7bb56e4\" x=\"30.103125\" y=\"142.615786\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_10\">\n",
       "      <!-- 0.4 -->\n",
       "      <g transform=\"translate(7.2 146.415004) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-34\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_5\">\n",
       "     <g id=\"line2d_19\">\n",
       "      <path d=\"M 30.103125 106.195391 \n",
       "L 283.739489 106.195391 \n",
       "\" clip-path=\"url(#p1e1c92a354)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_20\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#md5e7bb56e4\" x=\"30.103125\" y=\"106.195391\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_11\">\n",
       "      <!-- 0.5 -->\n",
       "      <g transform=\"translate(7.2 109.99461) scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-35\" d=\"M 691 4666 \n",
       "L 3169 4666 \n",
       "L 3169 4134 \n",
       "L 1269 4134 \n",
       "L 1269 2991 \n",
       "Q 1406 3038 1543 3061 \n",
       "Q 1681 3084 1819 3084 \n",
       "Q 2600 3084 3056 2656 \n",
       "Q 3513 2228 3513 1497 \n",
       "Q 3513 744 3044 326 \n",
       "Q 2575 -91 1722 -91 \n",
       "Q 1428 -91 1123 -41 \n",
       "Q 819 9 494 109 \n",
       "L 494 744 \n",
       "Q 775 591 1075 516 \n",
       "Q 1375 441 1709 441 \n",
       "Q 2250 441 2565 725 \n",
       "Q 2881 1009 2881 1497 \n",
       "Q 2881 1984 2565 2268 \n",
       "Q 2250 2553 1709 2553 \n",
       "Q 1456 2553 1204 2497 \n",
       "Q 953 2441 691 2322 \n",
       "L 691 4666 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-35\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_6\">\n",
       "     <g id=\"line2d_21\">\n",
       "      <path d=\"M 30.103125 69.774997 \n",
       "L 283.739489 69.774997 \n",
       "\" clip-path=\"url(#p1e1c92a354)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_22\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#md5e7bb56e4\" x=\"30.103125\" y=\"69.774997\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_12\">\n",
       "      <!-- 0.6 -->\n",
       "      <g transform=\"translate(7.2 73.574216) scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-36\" d=\"M 2113 2584 \n",
       "Q 1688 2584 1439 2293 \n",
       "Q 1191 2003 1191 1497 \n",
       "Q 1191 994 1439 701 \n",
       "Q 1688 409 2113 409 \n",
       "Q 2538 409 2786 701 \n",
       "Q 3034 994 3034 1497 \n",
       "Q 3034 2003 2786 2293 \n",
       "Q 2538 2584 2113 2584 \n",
       "z\n",
       "M 3366 4563 \n",
       "L 3366 3988 \n",
       "Q 3128 4100 2886 4159 \n",
       "Q 2644 4219 2406 4219 \n",
       "Q 1781 4219 1451 3797 \n",
       "Q 1122 3375 1075 2522 \n",
       "Q 1259 2794 1537 2939 \n",
       "Q 1816 3084 2150 3084 \n",
       "Q 2853 3084 3261 2657 \n",
       "Q 3669 2231 3669 1497 \n",
       "Q 3669 778 3244 343 \n",
       "Q 2819 -91 2113 -91 \n",
       "Q 1303 -91 875 529 \n",
       "Q 447 1150 447 2328 \n",
       "Q 447 3434 972 4092 \n",
       "Q 1497 4750 2381 4750 \n",
       "Q 2619 4750 2861 4703 \n",
       "Q 3103 4656 3366 4563 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-36\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_7\">\n",
       "     <g id=\"line2d_23\">\n",
       "      <path d=\"M 30.103125 33.354603 \n",
       "L 283.739489 33.354603 \n",
       "\" clip-path=\"url(#p1e1c92a354)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_24\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#md5e7bb56e4\" x=\"30.103125\" y=\"33.354603\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_13\">\n",
       "      <!-- 0.7 -->\n",
       "      <g transform=\"translate(7.2 37.153822) scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-37\" d=\"M 525 4666 \n",
       "L 3525 4666 \n",
       "L 3525 4397 \n",
       "L 1831 0 \n",
       "L 1172 0 \n",
       "L 2766 4134 \n",
       "L 525 4134 \n",
       "L 525 4666 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-37\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"line2d_25\">\n",
       "    <path d=\"M 41.632051 36.927155 \n",
       "L 42.221765 35.582156 \n",
       "L 42.81148 35.456812 \n",
       "L 43.401195 37.335184 \n",
       "L 43.99091 35.66291 \n",
       "L 44.580625 40.638744 \n",
       "L 45.17034 38.698548 \n",
       "L 45.760055 47.881614 \n",
       "L 46.34977 43.082463 \n",
       "L 46.939484 45.133524 \n",
       "L 47.529199 34.623954 \n",
       "L 48.118914 56.746611 \n",
       "L 48.708629 19.8 \n",
       "L 49.298344 28.874807 \n",
       "L 49.888059 32.043798 \n",
       "L 50.477774 32.649111 \n",
       "L 51.067488 36.733018 \n",
       "L 51.657203 36.782274 \n",
       "L 52.246918 36.020445 \n",
       "L 52.836633 36.210827 \n",
       "L 53.426348 35.217349 \n",
       "L 54.605778 39.569179 \n",
       "L 55.195493 39.803324 \n",
       "L 55.785207 40.748436 \n",
       "L 56.374922 36.682916 \n",
       "L 56.964637 52.915952 \n",
       "L 57.554352 39.648762 \n",
       "L 58.144067 37.823402 \n",
       "L 58.733782 35.109025 \n",
       "L 59.323497 42.924124 \n",
       "L 59.913211 68.522683 \n",
       "L 60.502926 73.411337 \n",
       "L 61.092641 48.931642 \n",
       "L 61.682356 50.129351 \n",
       "L 62.272071 36.505668 \n",
       "L 63.451501 69.1494 \n",
       "L 64.041216 65.200366 \n",
       "L 64.63093 67.865748 \n",
       "L 65.220645 45.993735 \n",
       "L 65.81036 73.268497 \n",
       "L 66.98979 37.950156 \n",
       "L 68.16922 92.413955 \n",
       "L 68.758934 84.706876 \n",
       "L 69.348649 87.546445 \n",
       "L 69.938364 80.849472 \n",
       "L 70.528079 77.618634 \n",
       "L 71.117794 96.548464 \n",
       "L 71.707509 111.322641 \n",
       "L 72.297224 78.136397 \n",
       "L 72.886938 94.592703 \n",
       "L 73.476653 124.383602 \n",
       "L 74.066368 108.693826 \n",
       "L 74.656083 122.656408 \n",
       "L 75.245798 126.824391 \n",
       "L 75.835513 113.009219 \n",
       "L 76.425228 105.474417 \n",
       "L 77.014943 129.034442 \n",
       "L 77.604657 119.319503 \n",
       "L 78.194372 162.354083 \n",
       "L 78.784087 127.995974 \n",
       "L 79.373802 120.522769 \n",
       "L 79.963517 144.909238 \n",
       "L 80.553232 125.037422 \n",
       "L 81.142947 158.607001 \n",
       "L 81.732661 150.871213 \n",
       "L 82.322376 110.153586 \n",
       "L 82.912091 130.392011 \n",
       "L 83.501806 132.386869 \n",
       "L 84.091521 140.161742 \n",
       "L 84.681236 115.209611 \n",
       "L 85.270951 141.822477 \n",
       "L 85.860666 149.025805 \n",
       "L 86.45038 133.090205 \n",
       "L 87.040095 103.30242 \n",
       "L 87.62981 148.13263 \n",
       "L 88.219525 102.046989 \n",
       "L 88.80924 147.396037 \n",
       "L 89.398955 166.781588 \n",
       "L 89.98867 147.055001 \n",
       "L 90.578384 158.458115 \n",
       "L 91.168099 136.42762 \n",
       "L 91.757814 164.08423 \n",
       "L 92.347529 177.597483 \n",
       "L 92.937244 164.578874 \n",
       "L 93.526959 137.12516 \n",
       "L 94.116674 167.000418 \n",
       "L 94.706389 186.130279 \n",
       "L 95.296103 166.56316 \n",
       "L 95.885818 171.774289 \n",
       "L 96.475533 182.465102 \n",
       "L 97.065248 172.969459 \n",
       "L 97.654963 144.787075 \n",
       "L 98.244678 189.678752 \n",
       "L 98.834393 150.003914 \n",
       "L 99.424107 95.57194 \n",
       "L 100.013822 174.582609 \n",
       "L 100.603537 197.75473 \n",
       "L 101.193252 167.417748 \n",
       "L 101.782967 190.992741 \n",
       "L 102.372682 182.618883 \n",
       "L 102.962397 185.408675 \n",
       "L 103.552111 170.652093 \n",
       "L 104.141826 164.72306 \n",
       "L 104.731541 187.213889 \n",
       "L 105.321256 195.538654 \n",
       "L 105.910971 181.538659 \n",
       "L 106.500686 191.886405 \n",
       "L 107.090401 139.480733 \n",
       "L 107.680116 185.883955 \n",
       "L 108.26983 168.214549 \n",
       "L 108.859545 200.847656 \n",
       "L 109.44926 184.946604 \n",
       "L 110.038975 202.063014 \n",
       "L 110.62869 198.257477 \n",
       "L 111.218405 220.550039 \n",
       "L 111.80812 208.306349 \n",
       "L 112.397834 209.684155 \n",
       "L 112.987549 158.977691 \n",
       "L 113.577264 204.894583 \n",
       "L 114.166979 177.826451 \n",
       "L 114.756694 198.667127 \n",
       "L 115.346409 194.854931 \n",
       "L 115.936124 202.422757 \n",
       "L 116.525839 200.142376 \n",
       "L 117.115553 162.770186 \n",
       "L 117.705268 191.250169 \n",
       "L 118.294983 166.735979 \n",
       "L 119.474413 180.857063 \n",
       "L 120.064128 192.498067 \n",
       "L 120.653843 210.970602 \n",
       "L 121.833272 163.86718 \n",
       "L 122.422987 190.870166 \n",
       "L 123.012702 183.268556 \n",
       "L 123.602417 186.917094 \n",
       "L 124.192132 219.931847 \n",
       "L 125.371562 186.751938 \n",
       "L 125.961276 192.461348 \n",
       "L 126.550991 193.76674 \n",
       "L 127.140706 175.913748 \n",
       "L 127.730421 187.199399 \n",
       "L 128.320136 220.712471 \n",
       "L 129.499566 171.056126 \n",
       "L 131.26871 202.101258 \n",
       "L 131.858425 209.150306 \n",
       "L 132.44814 170.690863 \n",
       "L 133.037855 211.399622 \n",
       "L 133.62757 219.988055 \n",
       "L 134.806999 185.883022 \n",
       "L 135.396714 214.950375 \n",
       "L 135.986429 168.681885 \n",
       "L 136.576144 179.250914 \n",
       "L 137.165859 210.354153 \n",
       "L 137.755574 188.012514 \n",
       "L 138.345289 196.923098 \n",
       "L 138.935003 173.709363 \n",
       "L 139.524718 216.692744 \n",
       "L 140.114433 190.569615 \n",
       "L 141.293863 215.123172 \n",
       "L 141.883578 216.68031 \n",
       "L 142.473293 183.375176 \n",
       "L 143.063007 169.407722 \n",
       "L 143.652722 184.02218 \n",
       "L 144.242437 225.443913 \n",
       "L 144.832152 228.783347 \n",
       "L 145.421867 207.440054 \n",
       "L 146.601297 230.969243 \n",
       "L 147.191012 179.639676 \n",
       "L 147.780726 164.796988 \n",
       "L 148.370441 236.220055 \n",
       "L 148.960156 202.654406 \n",
       "L 149.549871 224.756304 \n",
       "L 150.139586 181.753234 \n",
       "L 150.729301 223.957001 \n",
       "L 151.319016 185.97717 \n",
       "L 151.90873 221.981773 \n",
       "L 152.498445 237.555335 \n",
       "L 153.08816 204.505289 \n",
       "L 153.677875 217.803777 \n",
       "L 154.26759 203.61823 \n",
       "L 154.857305 244.266645 \n",
       "L 156.036735 176.177417 \n",
       "L 156.626449 225.924013 \n",
       "L 157.216164 173.242212 \n",
       "L 157.805879 219.343407 \n",
       "L 158.395594 217.765951 \n",
       "L 158.985309 206.382835 \n",
       "L 159.575024 235.702118 \n",
       "L 160.164739 221.613498 \n",
       "L 160.754453 220.30499 \n",
       "L 161.344168 203.385996 \n",
       "L 161.933883 202.688721 \n",
       "L 162.523598 187.669838 \n",
       "L 163.113313 203.068898 \n",
       "L 163.703028 240.644841 \n",
       "L 164.292743 214.019748 \n",
       "L 164.882458 203.256294 \n",
       "L 165.472172 188.318318 \n",
       "L 166.061887 230.187941 \n",
       "L 166.651602 203.623831 \n",
       "L 167.241317 200.256681 \n",
       "L 167.831032 230.239656 \n",
       "L 168.420747 215.228533 \n",
       "L 169.010462 235.142099 \n",
       "L 169.600176 197.180894 \n",
       "L 170.189891 204.69179 \n",
       "L 170.779606 195.657203 \n",
       "L 171.369321 215.160679 \n",
       "L 171.959036 239.67845 \n",
       "L 172.548751 214.071033 \n",
       "L 173.138466 241.122765 \n",
       "L 173.72818 227.18435 \n",
       "L 174.317895 242.13044 \n",
       "L 175.497325 207.159426 \n",
       "L 176.676755 237.301326 \n",
       "L 177.26647 211.805599 \n",
       "L 177.856185 233.973469 \n",
       "L 178.445899 193.376252 \n",
       "L 179.035614 224.058373 \n",
       "L 179.625329 203.865297 \n",
       "L 180.215044 202.673232 \n",
       "L 180.804759 217.076393 \n",
       "L 181.394474 223.403267 \n",
       "L 181.984189 215.656636 \n",
       "L 182.573903 219.536757 \n",
       "L 183.163618 241.289533 \n",
       "L 183.753333 245.151693 \n",
       "L 184.343048 235.863112 \n",
       "L 184.932763 190.191891 \n",
       "L 185.522478 239.195762 \n",
       "L 186.112193 218.194716 \n",
       "L 186.701908 224.532015 \n",
       "L 187.291622 221.654874 \n",
       "L 187.881337 244.232892 \n",
       "L 188.471052 250.937807 \n",
       "L 189.060767 217.177945 \n",
       "L 189.650482 218.014846 \n",
       "L 190.240197 219.684075 \n",
       "L 190.829912 250.56805 \n",
       "L 191.419626 220.928652 \n",
       "L 192.009341 254.003855 \n",
       "L 192.599056 225.898875 \n",
       "L 193.188771 231.916395 \n",
       "L 193.778486 233.041778 \n",
       "L 194.368201 225.424728 \n",
       "L 194.957916 227.592129 \n",
       "L 195.547631 237.814482 \n",
       "L 196.137345 235.257842 \n",
       "L 196.72706 235.2561 \n",
       "L 197.316775 234.151677 \n",
       "L 197.90649 194.52171 \n",
       "L 198.496205 216.018095 \n",
       "L 199.08592 208.756844 \n",
       "L 199.675635 236.206422 \n",
       "L 200.265349 219.486172 \n",
       "L 200.855064 226.072654 \n",
       "L 201.444779 242.790403 \n",
       "L 202.034494 231.44213 \n",
       "L 202.624209 227.676058 \n",
       "L 203.213924 235.481682 \n",
       "L 203.803639 240.507786 \n",
       "L 204.393353 233.677629 \n",
       "L 204.983068 241.541506 \n",
       "L 205.572783 243.407946 \n",
       "L 206.162498 220.208345 \n",
       "L 206.752213 229.779017 \n",
       "L 207.341928 256.339893 \n",
       "L 207.931643 217.680919 \n",
       "L 208.521358 221.678162 \n",
       "L 209.111072 207.57788 \n",
       "L 209.700787 255.260477 \n",
       "L 210.290502 248.731055 \n",
       "L 210.880217 219.149238 \n",
       "L 211.469932 233.958132 \n",
       "L 212.059647 180.217213 \n",
       "L 212.649362 246.919689 \n",
       "L 213.828791 237.065076 \n",
       "L 214.418506 250.430631 \n",
       "L 215.008221 225.027299 \n",
       "L 215.597936 254.795403 \n",
       "L 216.187651 259.359116 \n",
       "L 216.777366 250.714033 \n",
       "L 217.367081 262.322686 \n",
       "L 217.956795 238.920523 \n",
       "L 218.54651 230.811608 \n",
       "L 219.136225 227.073893 \n",
       "L 219.72594 245.481026 \n",
       "L 220.315655 239.125394 \n",
       "L 220.90537 230.798165 \n",
       "L 221.495085 218.181191 \n",
       "L 222.084799 224.452416 \n",
       "L 222.674514 217.625759 \n",
       "L 223.264229 232.518066 \n",
       "L 223.853944 243.62133 \n",
       "L 224.443659 189.496728 \n",
       "L 225.033374 224.629881 \n",
       "L 225.623089 248.130051 \n",
       "L 226.212804 233.794218 \n",
       "L 226.802518 252.958709 \n",
       "L 227.392233 214.706314 \n",
       "L 227.981948 251.873513 \n",
       "L 228.571663 251.084766 \n",
       "L 229.161378 230.096229 \n",
       "L 229.751093 244.717167 \n",
       "L 230.340808 247.241489 \n",
       "L 230.930522 262.305303 \n",
       "L 231.520237 258.323858 \n",
       "L 232.109952 261.325108 \n",
       "L 232.699667 214.66165 \n",
       "L 233.289382 256.214701 \n",
       "L 233.879097 253.708012 \n",
       "L 234.468812 227.729987 \n",
       "L 235.058526 246.259815 \n",
       "L 235.648241 220.727069 \n",
       "L 236.237956 229.271631 \n",
       "L 236.827671 200.306892 \n",
       "L 237.417386 265.076651 \n",
       "L 238.007101 224.234178 \n",
       "L 238.596816 267.110852 \n",
       "L 239.186531 211.217435 \n",
       "L 239.776245 235.460852 \n",
       "L 240.36596 234.021183 \n",
       "L 240.955675 227.071136 \n",
       "L 241.54539 254.537278 \n",
       "L 242.135105 216.478082 \n",
       "L 242.72482 269.259477 \n",
       "L 243.314535 243.119435 \n",
       "L 243.904249 230.036591 \n",
       "L 244.493964 233.278495 \n",
       "L 245.083679 256.660345 \n",
       "L 245.673394 234.443479 \n",
       "L 246.263109 249.639805 \n",
       "L 246.852824 251.496267 \n",
       "L 247.442539 221.318141 \n",
       "L 248.032254 271.689943 \n",
       "L 248.621968 269.912828 \n",
       "L 249.211683 219.764754 \n",
       "L 249.801398 254.313206 \n",
       "L 250.980828 249.572217 \n",
       "L 251.570543 263.726924 \n",
       "L 252.160258 269.350379 \n",
       "L 252.749972 237.75174 \n",
       "L 253.339687 263.435364 \n",
       "L 253.929402 248.452608 \n",
       "L 254.519117 262.717092 \n",
       "L 255.108832 253.412783 \n",
       "L 255.698547 239.635343 \n",
       "L 256.288262 205.461326 \n",
       "L 256.877977 244.657033 \n",
       "L 257.467691 248.64525 \n",
       "L 258.057406 218.432812 \n",
       "L 258.647121 258.002707 \n",
       "L 259.236836 254.556118 \n",
       "L 259.826551 252.043247 \n",
       "L 260.416266 240.282216 \n",
       "L 261.005981 265.434503 \n",
       "L 261.595695 247.401506 \n",
       "L 262.18541 262.265634 \n",
       "L 262.775125 229.074558 \n",
       "L 263.36484 262.841057 \n",
       "L 263.954555 260.722527 \n",
       "L 264.54427 265.572458 \n",
       "L 265.133985 257.454112 \n",
       "L 265.723699 271.8 \n",
       "L 266.313414 209.751054 \n",
       "L 266.903129 257.221283 \n",
       "L 267.492844 232.414491 \n",
       "L 268.082559 257.921379 \n",
       "L 268.672274 254.143496 \n",
       "L 269.261989 259.472238 \n",
       "L 270.441418 251.527316 \n",
       "L 271.031133 268.990778 \n",
       "L 271.620848 260.111234 \n",
       "L 272.210563 236.777724 \n",
       "L 272.210563 236.777724 \n",
       "\" clip-path=\"url(#p1e1c92a354)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_26\">\n",
       "    <path d=\"M 41.632051 35.2395 \n",
       "L 53.190462 36.629912 \n",
       "L 64.748873 60.420971 \n",
       "L 76.307285 107.359478 \n",
       "L 87.865696 133.932834 \n",
       "L 99.424107 154.171444 \n",
       "L 110.982519 163.296569 \n",
       "L 122.54093 167.371618 \n",
       "L 134.099342 171.856465 \n",
       "L 145.657753 173.070419 \n",
       "L 157.216164 176.339799 \n",
       "L 168.774576 175.181878 \n",
       "L 180.332987 177.331873 \n",
       "L 191.891398 177.738829 \n",
       "L 203.44981 165.080293 \n",
       "L 215.008221 161.222612 \n",
       "L 226.566632 159.084835 \n",
       "L 238.125044 163.641102 \n",
       "L 249.683455 151.245226 \n",
       "L 261.241867 139.145916 \n",
       "\" clip-path=\"url(#p1e1c92a354)\" style=\"fill: none; stroke: #ff7f0e; stroke-width: 1.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_3\">\n",
       "    <path d=\"M 30.103125 284.4 \n",
       "L 30.103125 7.2 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_4\">\n",
       "    <path d=\"M 283.739489 284.4 \n",
       "L 283.739489 7.2 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_5\">\n",
       "    <path d=\"M 30.103125 284.4 \n",
       "L 283.739489 284.4 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_6\">\n",
       "    <path d=\"M 30.103125 7.2 \n",
       "L 283.739489 7.2 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"legend_1\">\n",
       "    <g id=\"patch_7\">\n",
       "     <path d=\"M 197.148864 45.1125 \n",
       "L 276.739489 45.1125 \n",
       "Q 278.739489 45.1125 278.739489 43.1125 \n",
       "L 278.739489 14.2 \n",
       "Q 278.739489 12.2 276.739489 12.2 \n",
       "L 197.148864 12.2 \n",
       "Q 195.148864 12.2 195.148864 14.2 \n",
       "L 195.148864 43.1125 \n",
       "Q 195.148864 45.1125 197.148864 45.1125 \n",
       "z\n",
       "\" style=\"fill: #ffffff; opacity: 0.8; stroke: #cccccc; stroke-linejoin: miter\"/>\n",
       "    </g>\n",
       "    <g id=\"line2d_27\">\n",
       "     <path d=\"M 199.148864 20.298437 \n",
       "L 209.148864 20.298437 \n",
       "L 219.148864 20.298437 \n",
       "\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square\"/>\n",
       "    </g>\n",
       "    <g id=\"text_14\">\n",
       "     <!-- train_loss -->\n",
       "     <g transform=\"translate(227.148864 23.798437) scale(0.1 -0.1)\">\n",
       "      <defs>\n",
       "       <path id=\"DejaVuSans-72\" d=\"M 2631 2963 \n",
       "Q 2534 3019 2420 3045 \n",
       "Q 2306 3072 2169 3072 \n",
       "Q 1681 3072 1420 2755 \n",
       "Q 1159 2438 1159 1844 \n",
       "L 1159 0 \n",
       "L 581 0 \n",
       "L 581 3500 \n",
       "L 1159 3500 \n",
       "L 1159 2956 \n",
       "Q 1341 3275 1631 3429 \n",
       "Q 1922 3584 2338 3584 \n",
       "Q 2397 3584 2469 3576 \n",
       "Q 2541 3569 2628 3553 \n",
       "L 2631 2963 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       <path id=\"DejaVuSans-61\" d=\"M 2194 1759 \n",
       "Q 1497 1759 1228 1600 \n",
       "Q 959 1441 959 1056 \n",
       "Q 959 750 1161 570 \n",
       "Q 1363 391 1709 391 \n",
       "Q 2188 391 2477 730 \n",
       "Q 2766 1069 2766 1631 \n",
       "L 2766 1759 \n",
       "L 2194 1759 \n",
       "z\n",
       "M 3341 1997 \n",
       "L 3341 0 \n",
       "L 2766 0 \n",
       "L 2766 531 \n",
       "Q 2569 213 2275 61 \n",
       "Q 1981 -91 1556 -91 \n",
       "Q 1019 -91 701 211 \n",
       "Q 384 513 384 1019 \n",
       "Q 384 1609 779 1909 \n",
       "Q 1175 2209 1959 2209 \n",
       "L 2766 2209 \n",
       "L 2766 2266 \n",
       "Q 2766 2663 2505 2880 \n",
       "Q 2244 3097 1772 3097 \n",
       "Q 1472 3097 1187 3025 \n",
       "Q 903 2953 641 2809 \n",
       "L 641 3341 \n",
       "Q 956 3463 1253 3523 \n",
       "Q 1550 3584 1831 3584 \n",
       "Q 2591 3584 2966 3190 \n",
       "Q 3341 2797 3341 1997 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       <path id=\"DejaVuSans-69\" d=\"M 603 3500 \n",
       "L 1178 3500 \n",
       "L 1178 0 \n",
       "L 603 0 \n",
       "L 603 3500 \n",
       "z\n",
       "M 603 4863 \n",
       "L 1178 4863 \n",
       "L 1178 4134 \n",
       "L 603 4134 \n",
       "L 603 4863 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       <path id=\"DejaVuSans-6e\" d=\"M 3513 2113 \n",
       "L 3513 0 \n",
       "L 2938 0 \n",
       "L 2938 2094 \n",
       "Q 2938 2591 2744 2837 \n",
       "Q 2550 3084 2163 3084 \n",
       "Q 1697 3084 1428 2787 \n",
       "Q 1159 2491 1159 1978 \n",
       "L 1159 0 \n",
       "L 581 0 \n",
       "L 581 3500 \n",
       "L 1159 3500 \n",
       "L 1159 2956 \n",
       "Q 1366 3272 1645 3428 \n",
       "Q 1925 3584 2291 3584 \n",
       "Q 2894 3584 3203 3211 \n",
       "Q 3513 2838 3513 2113 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       <path id=\"DejaVuSans-5f\" d=\"M 3263 -1063 \n",
       "L 3263 -1509 \n",
       "L -63 -1509 \n",
       "L -63 -1063 \n",
       "L 3263 -1063 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       <path id=\"DejaVuSans-6c\" d=\"M 603 4863 \n",
       "L 1178 4863 \n",
       "L 1178 0 \n",
       "L 603 0 \n",
       "L 603 4863 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       <path id=\"DejaVuSans-6f\" d=\"M 1959 3097 \n",
       "Q 1497 3097 1228 2736 \n",
       "Q 959 2375 959 1747 \n",
       "Q 959 1119 1226 758 \n",
       "Q 1494 397 1959 397 \n",
       "Q 2419 397 2687 759 \n",
       "Q 2956 1122 2956 1747 \n",
       "Q 2956 2369 2687 2733 \n",
       "Q 2419 3097 1959 3097 \n",
       "z\n",
       "M 1959 3584 \n",
       "Q 2709 3584 3137 3096 \n",
       "Q 3566 2609 3566 1747 \n",
       "Q 3566 888 3137 398 \n",
       "Q 2709 -91 1959 -91 \n",
       "Q 1206 -91 779 398 \n",
       "Q 353 888 353 1747 \n",
       "Q 353 2609 779 3096 \n",
       "Q 1206 3584 1959 3584 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "      </defs>\n",
       "      <use xlink:href=\"#DejaVuSans-74\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-72\" x=\"39.208984\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-61\" x=\"80.322266\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-69\" x=\"141.601562\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-6e\" x=\"169.384766\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-5f\" x=\"232.763672\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-6c\" x=\"282.763672\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-6f\" x=\"310.546875\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-73\" x=\"371.728516\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-73\" x=\"423.828125\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"line2d_28\">\n",
       "     <path d=\"M 199.148864 35.254687 \n",
       "L 209.148864 35.254687 \n",
       "L 219.148864 35.254687 \n",
       "\" style=\"fill: none; stroke: #ff7f0e; stroke-width: 1.5; stroke-linecap: square\"/>\n",
       "    </g>\n",
       "    <g id=\"text_15\">\n",
       "     <!-- val_loss -->\n",
       "     <g transform=\"translate(227.148864 38.754687) scale(0.1 -0.1)\">\n",
       "      <defs>\n",
       "       <path id=\"DejaVuSans-76\" d=\"M 191 3500 \n",
       "L 800 3500 \n",
       "L 1894 563 \n",
       "L 2988 3500 \n",
       "L 3597 3500 \n",
       "L 2284 0 \n",
       "L 1503 0 \n",
       "L 191 3500 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "      </defs>\n",
       "      <use xlink:href=\"#DejaVuSans-76\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-61\" x=\"59.179688\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-6c\" x=\"120.458984\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-5f\" x=\"148.242188\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-6c\" x=\"198.242188\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-6f\" x=\"226.025391\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-73\" x=\"287.207031\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-73\" x=\"339.306641\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       "  <g id=\"axes_2\">\n",
       "   <g id=\"patch_8\">\n",
       "    <path d=\"M 334.466761 284.4 \n",
       "L 588.103125 284.4 \n",
       "L 588.103125 7.2 \n",
       "L 334.466761 7.2 \n",
       "z\n",
       "\" style=\"fill: #ffffff\"/>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_3\">\n",
       "    <g id=\"xtick_6\">\n",
       "     <g id=\"line2d_29\">\n",
       "      <path d=\"M 345.995687 284.4 \n",
       "L 345.995687 7.2 \n",
       "\" clip-path=\"url(#ped642bc9c8)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_30\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#mc0e4cf00b2\" x=\"345.995687\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_16\">\n",
       "      <!-- 0 -->\n",
       "      <g transform=\"translate(342.814437 298.998438) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_7\">\n",
       "     <g id=\"line2d_31\">\n",
       "      <path d=\"M 404.967174 284.4 \n",
       "L 404.967174 7.2 \n",
       "\" clip-path=\"url(#ped642bc9c8)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_32\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#mc0e4cf00b2\" x=\"404.967174\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_17\">\n",
       "      <!-- 1000 -->\n",
       "      <g transform=\"translate(392.242174 298.998438) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-31\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_8\">\n",
       "     <g id=\"line2d_33\">\n",
       "      <path d=\"M 463.93866 284.4 \n",
       "L 463.93866 7.2 \n",
       "\" clip-path=\"url(#ped642bc9c8)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_34\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#mc0e4cf00b2\" x=\"463.93866\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_18\">\n",
       "      <!-- 2000 -->\n",
       "      <g transform=\"translate(451.21366 298.998438) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-32\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_9\">\n",
       "     <g id=\"line2d_35\">\n",
       "      <path d=\"M 522.910147 284.4 \n",
       "L 522.910147 7.2 \n",
       "\" clip-path=\"url(#ped642bc9c8)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_36\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#mc0e4cf00b2\" x=\"522.910147\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_19\">\n",
       "      <!-- 3000 -->\n",
       "      <g transform=\"translate(510.185147 298.998438) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-33\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_10\">\n",
       "     <g id=\"line2d_37\">\n",
       "      <path d=\"M 581.881633 284.4 \n",
       "L 581.881633 7.2 \n",
       "\" clip-path=\"url(#ped642bc9c8)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_38\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#mc0e4cf00b2\" x=\"581.881633\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_20\">\n",
       "      <!-- 4000 -->\n",
       "      <g transform=\"translate(569.156633 298.998438) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-34\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"text_21\">\n",
       "     <!-- step -->\n",
       "     <g transform=\"translate(450.469318 312.676562) scale(0.1 -0.1)\">\n",
       "      <use xlink:href=\"#DejaVuSans-73\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-74\" x=\"52.099609\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-65\" x=\"91.308594\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-70\" x=\"152.832031\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_4\">\n",
       "    <g id=\"ytick_8\">\n",
       "     <g id=\"line2d_39\">\n",
       "      <path d=\"M 334.466761 277.92973 \n",
       "L 588.103125 277.92973 \n",
       "\" clip-path=\"url(#ped642bc9c8)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_40\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#md5e7bb56e4\" x=\"334.466761\" y=\"277.92973\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_22\">\n",
       "      <!-- 0.4 -->\n",
       "      <g transform=\"translate(311.563636 281.728948) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-34\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_9\">\n",
       "     <g id=\"line2d_41\">\n",
       "      <path d=\"M 334.466761 234.340541 \n",
       "L 588.103125 234.340541 \n",
       "\" clip-path=\"url(#ped642bc9c8)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_42\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#md5e7bb56e4\" x=\"334.466761\" y=\"234.340541\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_23\">\n",
       "      <!-- 0.5 -->\n",
       "      <g transform=\"translate(311.563636 238.139759) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-35\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_10\">\n",
       "     <g id=\"line2d_43\">\n",
       "      <path d=\"M 334.466761 190.751351 \n",
       "L 588.103125 190.751351 \n",
       "\" clip-path=\"url(#ped642bc9c8)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_44\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#md5e7bb56e4\" x=\"334.466761\" y=\"190.751351\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_24\">\n",
       "      <!-- 0.6 -->\n",
       "      <g transform=\"translate(311.563636 194.55057) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-36\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_11\">\n",
       "     <g id=\"line2d_45\">\n",
       "      <path d=\"M 334.466761 147.162162 \n",
       "L 588.103125 147.162162 \n",
       "\" clip-path=\"url(#ped642bc9c8)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_46\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#md5e7bb56e4\" x=\"334.466761\" y=\"147.162162\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_25\">\n",
       "      <!-- 0.7 -->\n",
       "      <g transform=\"translate(311.563636 150.961381) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-37\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_12\">\n",
       "     <g id=\"line2d_47\">\n",
       "      <path d=\"M 334.466761 103.572973 \n",
       "L 588.103125 103.572973 \n",
       "\" clip-path=\"url(#ped642bc9c8)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_48\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#md5e7bb56e4\" x=\"334.466761\" y=\"103.572973\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_26\">\n",
       "      <!-- 0.8 -->\n",
       "      <g transform=\"translate(311.563636 107.372192) scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-38\" d=\"M 2034 2216 \n",
       "Q 1584 2216 1326 1975 \n",
       "Q 1069 1734 1069 1313 \n",
       "Q 1069 891 1326 650 \n",
       "Q 1584 409 2034 409 \n",
       "Q 2484 409 2743 651 \n",
       "Q 3003 894 3003 1313 \n",
       "Q 3003 1734 2745 1975 \n",
       "Q 2488 2216 2034 2216 \n",
       "z\n",
       "M 1403 2484 \n",
       "Q 997 2584 770 2862 \n",
       "Q 544 3141 544 3541 \n",
       "Q 544 4100 942 4425 \n",
       "Q 1341 4750 2034 4750 \n",
       "Q 2731 4750 3128 4425 \n",
       "Q 3525 4100 3525 3541 \n",
       "Q 3525 3141 3298 2862 \n",
       "Q 3072 2584 2669 2484 \n",
       "Q 3125 2378 3379 2068 \n",
       "Q 3634 1759 3634 1313 \n",
       "Q 3634 634 3220 271 \n",
       "Q 2806 -91 2034 -91 \n",
       "Q 1263 -91 848 271 \n",
       "Q 434 634 434 1313 \n",
       "Q 434 1759 690 2068 \n",
       "Q 947 2378 1403 2484 \n",
       "z\n",
       "M 1172 3481 \n",
       "Q 1172 3119 1398 2916 \n",
       "Q 1625 2713 2034 2713 \n",
       "Q 2441 2713 2670 2916 \n",
       "Q 2900 3119 2900 3481 \n",
       "Q 2900 3844 2670 4047 \n",
       "Q 2441 4250 2034 4250 \n",
       "Q 1625 4250 1398 4047 \n",
       "Q 1172 3844 1172 3481 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-38\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_13\">\n",
       "     <g id=\"line2d_49\">\n",
       "      <path d=\"M 334.466761 59.983784 \n",
       "L 588.103125 59.983784 \n",
       "\" clip-path=\"url(#ped642bc9c8)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_50\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#md5e7bb56e4\" x=\"334.466761\" y=\"59.983784\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_27\">\n",
       "      <!-- 0.9 -->\n",
       "      <g transform=\"translate(311.563636 63.783003) scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-39\" d=\"M 703 97 \n",
       "L 703 672 \n",
       "Q 941 559 1184 500 \n",
       "Q 1428 441 1663 441 \n",
       "Q 2288 441 2617 861 \n",
       "Q 2947 1281 2994 2138 \n",
       "Q 2813 1869 2534 1725 \n",
       "Q 2256 1581 1919 1581 \n",
       "Q 1219 1581 811 2004 \n",
       "Q 403 2428 403 3163 \n",
       "Q 403 3881 828 4315 \n",
       "Q 1253 4750 1959 4750 \n",
       "Q 2769 4750 3195 4129 \n",
       "Q 3622 3509 3622 2328 \n",
       "Q 3622 1225 3098 567 \n",
       "Q 2575 -91 1691 -91 \n",
       "Q 1453 -91 1209 -44 \n",
       "Q 966 3 703 97 \n",
       "z\n",
       "M 1959 2075 \n",
       "Q 2384 2075 2632 2365 \n",
       "Q 2881 2656 2881 3163 \n",
       "Q 2881 3666 2632 3958 \n",
       "Q 2384 4250 1959 4250 \n",
       "Q 1534 4250 1286 3958 \n",
       "Q 1038 3666 1038 3163 \n",
       "Q 1038 2656 1286 2365 \n",
       "Q 1534 2075 1959 2075 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-39\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_14\">\n",
       "     <g id=\"line2d_51\">\n",
       "      <path d=\"M 334.466761 16.394595 \n",
       "L 588.103125 16.394595 \n",
       "\" clip-path=\"url(#ped642bc9c8)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_52\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#md5e7bb56e4\" x=\"334.466761\" y=\"16.394595\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_28\">\n",
       "      <!-- 1.0 -->\n",
       "      <g transform=\"translate(311.563636 20.193813) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-31\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"line2d_53\">\n",
       "    <path d=\"M 345.995687 210.502703 \n",
       "L 346.585402 258.178378 \n",
       "L 347.175117 247.962162 \n",
       "L 347.764832 190.07027 \n",
       "L 348.354546 230.935135 \n",
       "L 348.944261 207.097297 \n",
       "L 349.533976 207.097297 \n",
       "L 350.123691 200.286486 \n",
       "L 350.713406 196.881081 \n",
       "L 351.303121 183.259459 \n",
       "L 351.892836 241.151351 \n",
       "L 352.482551 169.637838 \n",
       "L 353.072265 244.556757 \n",
       "L 353.66198 271.8 \n",
       "L 354.84141 230.935135 \n",
       "L 355.431125 224.124324 \n",
       "L 356.02084 220.718919 \n",
       "L 356.610555 247.962162 \n",
       "L 357.200269 234.340541 \n",
       "L 357.789984 254.772973 \n",
       "L 358.379699 207.097297 \n",
       "L 358.969414 176.448649 \n",
       "L 359.559129 230.935135 \n",
       "L 360.148844 207.097297 \n",
       "L 360.738559 227.52973 \n",
       "L 361.328273 169.637838 \n",
       "L 361.917988 210.502703 \n",
       "L 363.097418 224.124324 \n",
       "L 363.687133 200.286486 \n",
       "L 364.276848 156.016216 \n",
       "L 364.866563 145.8 \n",
       "L 365.456278 190.07027 \n",
       "L 366.045992 166.232432 \n",
       "L 366.635707 217.313514 \n",
       "L 367.225422 179.854054 \n",
       "L 367.815137 152.610811 \n",
       "L 368.404852 166.232432 \n",
       "L 368.994567 149.205405 \n",
       "L 369.584282 190.07027 \n",
       "L 370.173996 145.8 \n",
       "L 370.763711 176.448649 \n",
       "L 371.353426 166.232432 \n",
       "L 371.943141 183.259459 \n",
       "L 372.532856 135.583784 \n",
       "L 373.122571 132.178378 \n",
       "L 373.712286 138.989189 \n",
       "L 374.302001 128.772973 \n",
       "L 374.891715 121.962162 \n",
       "L 375.48143 121.962162 \n",
       "L 376.071145 108.340541 \n",
       "L 376.66086 138.989189 \n",
       "L 377.250575 142.394595 \n",
       "L 377.84029 94.718919 \n",
       "L 378.430005 125.367568 \n",
       "L 379.019719 125.367568 \n",
       "L 379.609434 104.935135 \n",
       "L 380.199149 115.151351 \n",
       "L 380.788864 128.772973 \n",
       "L 381.378579 94.718919 \n",
       "L 381.968294 104.935135 \n",
       "L 382.558009 77.691892 \n",
       "L 383.147724 98.124324 \n",
       "L 383.737438 108.340541 \n",
       "L 384.327153 104.935135 \n",
       "L 384.916868 98.124324 \n",
       "L 385.506583 74.286486 \n",
       "L 386.096298 84.502703 \n",
       "L 386.686013 108.340541 \n",
       "L 387.275728 121.962162 \n",
       "L 387.865442 108.340541 \n",
       "L 388.455157 101.52973 \n",
       "L 389.044872 115.151351 \n",
       "L 389.634587 101.52973 \n",
       "L 390.224302 84.502703 \n",
       "L 390.814017 104.935135 \n",
       "L 391.403732 108.340541 \n",
       "L 391.993446 104.935135 \n",
       "L 392.583161 125.367568 \n",
       "L 393.172876 91.313514 \n",
       "L 393.762591 84.502703 \n",
       "L 394.352306 94.718919 \n",
       "L 394.942021 77.691892 \n",
       "L 395.531736 101.52973 \n",
       "L 396.121451 67.475676 \n",
       "L 396.711165 60.664865 \n",
       "L 397.30088 91.313514 \n",
       "L 397.890595 98.124324 \n",
       "L 398.48031 87.908108 \n",
       "L 399.070025 70.881081 \n",
       "L 399.65974 81.097297 \n",
       "L 400.249455 84.502703 \n",
       "L 400.839169 64.07027 \n",
       "L 401.428884 81.097297 \n",
       "L 402.018599 87.908108 \n",
       "L 402.608314 53.854054 \n",
       "L 403.198029 104.935135 \n",
       "L 403.787744 108.340541 \n",
       "L 404.377459 84.502703 \n",
       "L 404.967174 53.854054 \n",
       "L 405.556888 84.502703 \n",
       "L 406.146603 57.259459 \n",
       "L 406.736318 77.691892 \n",
       "L 407.326033 70.881081 \n",
       "L 407.915748 77.691892 \n",
       "L 409.095178 70.881081 \n",
       "L 409.684892 64.07027 \n",
       "L 410.274607 67.475676 \n",
       "L 411.454037 94.718919 \n",
       "L 412.043752 60.664865 \n",
       "L 412.633467 87.908108 \n",
       "L 413.223182 53.854054 \n",
       "L 413.812897 50.448649 \n",
       "L 414.402611 64.07027 \n",
       "L 414.992326 57.259459 \n",
       "L 415.582041 43.637838 \n",
       "L 416.171756 57.259459 \n",
       "L 416.761471 50.448649 \n",
       "L 417.351186 91.313514 \n",
       "L 417.940901 43.637838 \n",
       "L 418.530615 67.475676 \n",
       "L 419.12033 57.259459 \n",
       "L 419.710045 50.448649 \n",
       "L 420.889475 64.07027 \n",
       "L 421.47919 67.475676 \n",
       "L 422.068905 57.259459 \n",
       "L 423.248334 91.313514 \n",
       "L 423.838049 60.664865 \n",
       "L 424.427764 60.664865 \n",
       "L 425.017479 43.637838 \n",
       "L 425.607194 77.691892 \n",
       "L 426.196909 91.313514 \n",
       "L 426.786624 64.07027 \n",
       "L 427.376338 67.475676 \n",
       "L 427.966053 87.908108 \n",
       "L 428.555768 43.637838 \n",
       "L 429.145483 57.259459 \n",
       "L 430.324913 64.07027 \n",
       "L 430.914628 64.07027 \n",
       "L 431.504342 84.502703 \n",
       "L 432.094057 53.854054 \n",
       "L 432.683772 36.827027 \n",
       "L 433.273487 67.475676 \n",
       "L 433.863202 67.475676 \n",
       "L 434.452917 60.664865 \n",
       "L 435.042632 67.475676 \n",
       "L 435.632347 53.854054 \n",
       "L 436.222061 50.448649 \n",
       "L 436.811776 70.881081 \n",
       "L 437.991206 50.448649 \n",
       "L 438.580921 67.475676 \n",
       "L 439.170636 74.286486 \n",
       "L 439.760351 40.232432 \n",
       "L 440.350065 77.691892 \n",
       "L 440.93978 60.664865 \n",
       "L 442.11921 60.664865 \n",
       "L 443.29864 67.475676 \n",
       "L 443.888355 43.637838 \n",
       "L 444.47807 70.881081 \n",
       "L 445.067784 57.259459 \n",
       "L 446.247214 50.448649 \n",
       "L 446.836929 67.475676 \n",
       "L 447.426644 70.881081 \n",
       "L 448.016359 70.881081 \n",
       "L 448.606074 50.448649 \n",
       "L 449.195788 47.043243 \n",
       "L 449.785503 50.448649 \n",
       "L 450.375218 47.043243 \n",
       "L 450.964933 47.043243 \n",
       "L 451.554648 77.691892 \n",
       "L 452.144363 64.07027 \n",
       "L 452.734078 36.827027 \n",
       "L 453.323792 53.854054 \n",
       "L 453.913507 50.448649 \n",
       "L 454.503222 53.854054 \n",
       "L 455.092937 40.232432 \n",
       "L 455.682652 70.881081 \n",
       "L 456.272367 47.043243 \n",
       "L 456.862082 43.637838 \n",
       "L 457.451797 50.448649 \n",
       "L 458.041511 40.232432 \n",
       "L 458.631226 60.664865 \n",
       "L 459.220941 33.421622 \n",
       "L 459.810656 67.475676 \n",
       "L 460.400371 64.07027 \n",
       "L 460.990086 43.637838 \n",
       "L 461.579801 64.07027 \n",
       "L 462.169515 43.637838 \n",
       "L 462.75923 53.854054 \n",
       "L 463.348945 50.448649 \n",
       "L 463.93866 43.637838 \n",
       "L 464.528375 43.637838 \n",
       "L 465.11809 47.043243 \n",
       "L 465.707805 64.07027 \n",
       "L 466.29752 64.07027 \n",
       "L 466.887234 60.664865 \n",
       "L 467.476949 53.854054 \n",
       "L 468.066664 36.827027 \n",
       "L 468.656379 50.448649 \n",
       "L 469.246094 47.043243 \n",
       "L 469.835809 64.07027 \n",
       "L 470.425524 47.043243 \n",
       "L 471.015238 57.259459 \n",
       "L 472.784383 57.259459 \n",
       "L 473.374098 36.827027 \n",
       "L 473.963813 60.664865 \n",
       "L 474.553528 60.664865 \n",
       "L 475.143243 53.854054 \n",
       "L 475.732957 57.259459 \n",
       "L 476.322672 33.421622 \n",
       "L 476.912387 43.637838 \n",
       "L 477.502102 43.637838 \n",
       "L 478.091817 33.421622 \n",
       "L 478.681532 33.421622 \n",
       "L 479.271247 47.043243 \n",
       "L 479.860961 53.854054 \n",
       "L 480.450676 40.232432 \n",
       "L 481.040391 40.232432 \n",
       "L 481.630106 57.259459 \n",
       "L 482.219821 36.827027 \n",
       "L 482.809536 57.259459 \n",
       "L 483.399251 40.232432 \n",
       "L 483.988966 57.259459 \n",
       "L 484.57868 53.854054 \n",
       "L 485.168395 40.232432 \n",
       "L 485.75811 47.043243 \n",
       "L 486.347825 40.232432 \n",
       "L 486.93754 50.448649 \n",
       "L 487.527255 36.827027 \n",
       "L 488.11697 33.421622 \n",
       "L 488.706684 36.827027 \n",
       "L 489.296399 64.07027 \n",
       "L 489.886114 30.016216 \n",
       "L 490.475829 43.637838 \n",
       "L 491.065544 50.448649 \n",
       "L 491.655259 36.827027 \n",
       "L 492.244974 33.421622 \n",
       "L 492.834688 33.421622 \n",
       "L 493.424403 40.232432 \n",
       "L 494.014118 36.827027 \n",
       "L 494.603833 36.827027 \n",
       "L 495.193548 33.421622 \n",
       "L 495.783263 40.232432 \n",
       "L 496.372978 30.016216 \n",
       "L 496.962693 40.232432 \n",
       "L 497.552407 43.637838 \n",
       "L 498.142122 40.232432 \n",
       "L 498.731837 47.043243 \n",
       "L 499.321552 40.232432 \n",
       "L 500.500982 33.421622 \n",
       "L 501.090697 43.637838 \n",
       "L 501.680411 47.043243 \n",
       "L 502.270126 60.664865 \n",
       "L 502.859841 50.448649 \n",
       "L 503.449556 57.259459 \n",
       "L 504.039271 33.421622 \n",
       "L 504.628986 36.827027 \n",
       "L 505.218701 36.827027 \n",
       "L 505.808416 30.016216 \n",
       "L 506.39813 47.043243 \n",
       "L 506.987845 50.448649 \n",
       "L 507.57756 36.827027 \n",
       "L 508.75699 36.827027 \n",
       "L 509.93642 30.016216 \n",
       "L 510.526134 43.637838 \n",
       "L 511.115849 47.043243 \n",
       "L 511.705564 30.016216 \n",
       "L 512.295279 50.448649 \n",
       "L 512.884994 43.637838 \n",
       "L 513.474709 47.043243 \n",
       "L 514.064424 33.421622 \n",
       "L 514.654139 30.016216 \n",
       "L 515.243853 40.232432 \n",
       "L 515.833568 43.637838 \n",
       "L 516.423283 70.881081 \n",
       "L 517.012998 33.421622 \n",
       "L 517.602713 36.827027 \n",
       "L 518.192428 33.421622 \n",
       "L 518.782143 33.421622 \n",
       "L 519.371857 43.637838 \n",
       "L 519.961572 23.205405 \n",
       "L 520.551287 30.016216 \n",
       "L 521.141002 33.421622 \n",
       "L 521.730717 23.205405 \n",
       "L 522.320432 36.827027 \n",
       "L 522.910147 47.043243 \n",
       "L 524.089576 40.232432 \n",
       "L 524.679291 43.637838 \n",
       "L 525.269006 36.827027 \n",
       "L 525.858721 47.043243 \n",
       "L 526.448436 36.827027 \n",
       "L 527.038151 43.637838 \n",
       "L 527.627866 30.016216 \n",
       "L 528.21758 33.421622 \n",
       "L 528.807295 50.448649 \n",
       "L 529.39701 47.043243 \n",
       "L 529.986725 36.827027 \n",
       "L 530.57644 36.827027 \n",
       "L 531.166155 33.421622 \n",
       "L 531.75587 50.448649 \n",
       "L 532.345584 33.421622 \n",
       "L 532.935299 40.232432 \n",
       "L 533.525014 40.232432 \n",
       "L 534.114729 26.610811 \n",
       "L 534.704444 33.421622 \n",
       "L 535.294159 30.016216 \n",
       "L 535.883874 30.016216 \n",
       "L 536.473589 26.610811 \n",
       "L 537.063303 43.637838 \n",
       "L 537.653018 30.016216 \n",
       "L 538.242733 26.610811 \n",
       "L 538.832448 47.043243 \n",
       "L 539.422163 33.421622 \n",
       "L 540.011878 40.232432 \n",
       "L 540.601593 40.232432 \n",
       "L 541.191307 47.043243 \n",
       "L 541.781022 23.205405 \n",
       "L 542.370737 43.637838 \n",
       "L 542.960452 26.610811 \n",
       "L 543.550167 43.637838 \n",
       "L 544.139882 33.421622 \n",
       "L 544.729597 36.827027 \n",
       "L 545.319312 47.043243 \n",
       "L 545.909026 26.610811 \n",
       "L 546.498741 40.232432 \n",
       "L 547.088456 23.205405 \n",
       "L 548.267886 43.637838 \n",
       "L 549.447316 30.016216 \n",
       "L 550.03703 40.232432 \n",
       "L 550.626745 40.232432 \n",
       "L 551.21646 30.016216 \n",
       "L 551.806175 36.827027 \n",
       "L 552.39589 23.205405 \n",
       "L 552.985605 23.205405 \n",
       "L 553.57532 47.043243 \n",
       "L 554.165034 30.016216 \n",
       "L 554.754749 26.610811 \n",
       "L 555.344464 30.016216 \n",
       "L 555.934179 23.205405 \n",
       "L 556.523894 23.205405 \n",
       "L 557.113609 30.016216 \n",
       "L 557.703324 26.610811 \n",
       "L 558.293039 30.016216 \n",
       "L 558.882753 30.016216 \n",
       "L 559.472468 36.827027 \n",
       "L 560.062183 26.610811 \n",
       "L 560.651898 40.232432 \n",
       "L 561.241613 36.827027 \n",
       "L 561.831328 30.016216 \n",
       "L 562.421043 43.637838 \n",
       "L 563.010757 26.610811 \n",
       "L 563.600472 23.205405 \n",
       "L 564.190187 33.421622 \n",
       "L 564.779902 33.421622 \n",
       "L 565.369617 19.8 \n",
       "L 565.959332 30.016216 \n",
       "L 566.549047 26.610811 \n",
       "L 567.138762 36.827027 \n",
       "L 567.728476 23.205405 \n",
       "L 568.318191 26.610811 \n",
       "L 568.907906 26.610811 \n",
       "L 569.497621 19.8 \n",
       "L 570.087336 23.205405 \n",
       "L 570.677051 36.827027 \n",
       "L 571.266766 23.205405 \n",
       "L 571.85648 33.421622 \n",
       "L 573.625625 23.205405 \n",
       "L 574.21534 30.016216 \n",
       "L 574.805055 23.205405 \n",
       "L 575.39477 23.205405 \n",
       "L 576.574199 36.827027 \n",
       "L 576.574199 36.827027 \n",
       "\" clip-path=\"url(#ped642bc9c8)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_54\">\n",
       "    <path d=\"M 345.995687 234.340541 \n",
       "L 357.554098 231.812368 \n",
       "L 369.11251 166.533198 \n",
       "L 380.670921 120.642499 \n",
       "L 392.229332 100.260195 \n",
       "L 403.787744 86.050119 \n",
       "L 415.346155 80.610188 \n",
       "L 426.904567 75.937427 \n",
       "L 438.462978 74.228731 \n",
       "L 450.021389 71.752865 \n",
       "L 461.579801 70.776467 \n",
       "L 473.138212 68.91085 \n",
       "L 484.696623 69.800069 \n",
       "L 496.255035 69.678019 \n",
       "L 507.813446 71.299537 \n",
       "L 519.371857 68.579572 \n",
       "L 530.930269 69.399049 \n",
       "L 542.48868 71.822608 \n",
       "L 554.047092 73.566175 \n",
       "L 565.605503 71.996964 \n",
       "\" clip-path=\"url(#ped642bc9c8)\" style=\"fill: none; stroke: #ff7f0e; stroke-width: 1.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_9\">\n",
       "    <path d=\"M 334.466761 284.4 \n",
       "L 334.466761 7.2 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_10\">\n",
       "    <path d=\"M 588.103125 284.4 \n",
       "L 588.103125 7.2 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_11\">\n",
       "    <path d=\"M 334.466761 284.4 \n",
       "L 588.103125 284.4 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_12\">\n",
       "    <path d=\"M 334.466761 7.2 \n",
       "L 588.103125 7.2 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"legend_2\">\n",
       "    <g id=\"patch_13\">\n",
       "     <path d=\"M 503.703125 279.4 \n",
       "L 581.103125 279.4 \n",
       "Q 583.103125 279.4 583.103125 277.4 \n",
       "L 583.103125 248.4875 \n",
       "Q 583.103125 246.4875 581.103125 246.4875 \n",
       "L 503.703125 246.4875 \n",
       "Q 501.703125 246.4875 501.703125 248.4875 \n",
       "L 501.703125 277.4 \n",
       "Q 501.703125 279.4 503.703125 279.4 \n",
       "z\n",
       "\" style=\"fill: #ffffff; opacity: 0.8; stroke: #cccccc; stroke-linejoin: miter\"/>\n",
       "    </g>\n",
       "    <g id=\"line2d_55\">\n",
       "     <path d=\"M 505.703125 254.585938 \n",
       "L 515.703125 254.585938 \n",
       "L 525.703125 254.585938 \n",
       "\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square\"/>\n",
       "    </g>\n",
       "    <g id=\"text_29\">\n",
       "     <!-- train_acc -->\n",
       "     <g transform=\"translate(533.703125 258.085938) scale(0.1 -0.1)\">\n",
       "      <defs>\n",
       "       <path id=\"DejaVuSans-63\" d=\"M 3122 3366 \n",
       "L 3122 2828 \n",
       "Q 2878 2963 2633 3030 \n",
       "Q 2388 3097 2138 3097 \n",
       "Q 1578 3097 1268 2742 \n",
       "Q 959 2388 959 1747 \n",
       "Q 959 1106 1268 751 \n",
       "Q 1578 397 2138 397 \n",
       "Q 2388 397 2633 464 \n",
       "Q 2878 531 3122 666 \n",
       "L 3122 134 \n",
       "Q 2881 22 2623 -34 \n",
       "Q 2366 -91 2075 -91 \n",
       "Q 1284 -91 818 406 \n",
       "Q 353 903 353 1747 \n",
       "Q 353 2603 823 3093 \n",
       "Q 1294 3584 2113 3584 \n",
       "Q 2378 3584 2631 3529 \n",
       "Q 2884 3475 3122 3366 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "      </defs>\n",
       "      <use xlink:href=\"#DejaVuSans-74\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-72\" x=\"39.208984\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-61\" x=\"80.322266\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-69\" x=\"141.601562\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-6e\" x=\"169.384766\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-5f\" x=\"232.763672\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-61\" x=\"282.763672\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-63\" x=\"344.042969\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-63\" x=\"399.023438\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"line2d_56\">\n",
       "     <path d=\"M 505.703125 269.542188 \n",
       "L 515.703125 269.542188 \n",
       "L 525.703125 269.542188 \n",
       "\" style=\"fill: none; stroke: #ff7f0e; stroke-width: 1.5; stroke-linecap: square\"/>\n",
       "    </g>\n",
       "    <g id=\"text_30\">\n",
       "     <!-- val_acc -->\n",
       "     <g transform=\"translate(533.703125 273.042188) scale(0.1 -0.1)\">\n",
       "      <use xlink:href=\"#DejaVuSans-76\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-61\" x=\"59.179688\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-6c\" x=\"120.458984\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-5f\" x=\"148.242188\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-61\" x=\"198.242188\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-63\" x=\"259.521484\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-63\" x=\"314.501953\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       " </g>\n",
       " <defs>\n",
       "  <clipPath id=\"p1e1c92a354\">\n",
       "   <rect x=\"30.103125\" y=\"7.2\" width=\"253.636364\" height=\"277.2\"/>\n",
       "  </clipPath>\n",
       "  <clipPath id=\"ped642bc9c8\">\n",
       "   <rect x=\"334.466761\" y=\"7.2\" width=\"253.636364\" height=\"277.2\"/>\n",
       "  </clipPath>\n",
       " </defs>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<Figure size 1000x500 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#画线要注意的是损失是不一定在零到1之间的\n",
    "def plot_learning_curves(record_dict, sample_step=500):\n",
    "    # build DataFrame\n",
    "    train_df = pd.DataFrame(record_dict[\"train\"]).set_index(\"step\").iloc[::sample_step]\n",
    "    val_df = pd.DataFrame(record_dict[\"val\"]).set_index(\"step\")\n",
    "\n",
    "    # plot\n",
    "    fig_num = len(train_df.columns)\n",
    "    fig, axs = plt.subplots(1, fig_num, figsize=(5 * fig_num, 5))\n",
    "    for idx, item in enumerate(train_df.columns):    \n",
    "        axs[idx].plot(train_df.index, train_df[item], label=f\"train_{item}\")\n",
    "        axs[idx].plot(val_df.index, val_df[item], label=f\"val_{item}\")\n",
    "        axs[idx].grid()\n",
    "        axs[idx].legend()\n",
    "        # axs[idx].set_xticks(range(0, train_df.index[-1], 5000))\n",
    "        # axs[idx].set_xticklabels(map(lambda x: f\"{int(x/1000)}k\", range(0, train_df.index[-1], 5000)))\n",
    "        axs[idx].set_xlabel(\"step\")\n",
    "    \n",
    "    plt.show()\n",
    "\n",
    "plot_learning_curves(record, sample_step=10)  #横坐标是 steps"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 评估"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "loss:     0.3489\n",
      "accuracy: 0.8803\n"
     ]
    }
   ],
   "source": [
    "# dataload for evaluating\n",
    "\n",
    "# load checkpoints\n",
    "model.load_state_dict(torch.load(\"checkpoints/imdb-lstm/best.ckpt\", map_location=\"cpu\"))\n",
    "\n",
    "model.eval()\n",
    "loss, acc = evaluating(model, test_dl, loss_fct)\n",
    "print(f\"loss:     {loss:.4f}\\naccuracy: {acc:.4f}\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "pytorch",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.8"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
